##// END OF EJS Templates
General work on inputhook and the docs....
Brian Granger -
Show More
@@ -1,3585 +1,3587 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: 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-2006 Fernando Perez <fperez@colorado.edu>
7 # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu>
8 #
8 #
9 # Distributed under the terms of the BSD License. The full license is in
9 # Distributed under the terms of the BSD License. The full license is in
10 # the file COPYING, distributed as part of this software.
10 # the file COPYING, distributed as part of this software.
11 #*****************************************************************************
11 #*****************************************************************************
12
12
13 #****************************************************************************
13 #****************************************************************************
14 # Modules and globals
14 # Modules and globals
15
15
16 # Python standard modules
16 # Python standard modules
17 import __builtin__
17 import __builtin__
18 import bdb
18 import bdb
19 import inspect
19 import inspect
20 import os
20 import os
21 import pdb
21 import pdb
22 import pydoc
22 import pydoc
23 import sys
23 import sys
24 import re
24 import re
25 import tempfile
25 import tempfile
26 import time
26 import time
27 import cPickle as pickle
27 import cPickle as pickle
28 import textwrap
28 import textwrap
29 from cStringIO import StringIO
29 from cStringIO import StringIO
30 from getopt import getopt,GetoptError
30 from getopt import getopt,GetoptError
31 from pprint import pprint, pformat
31 from pprint import pprint, pformat
32
32
33 # cProfile was added in Python2.5
33 # cProfile was added in Python2.5
34 try:
34 try:
35 import cProfile as profile
35 import cProfile as profile
36 import pstats
36 import pstats
37 except ImportError:
37 except ImportError:
38 # profile isn't bundled by default in Debian for license reasons
38 # profile isn't bundled by default in Debian for license reasons
39 try:
39 try:
40 import profile,pstats
40 import profile,pstats
41 except ImportError:
41 except ImportError:
42 profile = pstats = None
42 profile = pstats = None
43
43
44 # Homebrewed
44 # Homebrewed
45 import IPython
45 import IPython
46 from IPython.utils import wildcard
46 from IPython.utils import wildcard
47 from IPython.core import debugger, oinspect
47 from IPython.core import debugger, oinspect
48 from IPython.core.fakemodule import FakeModule
48 from IPython.core.fakemodule import FakeModule
49 from IPython.external.Itpl import Itpl, itpl, printpl,itplns
49 from IPython.external.Itpl import Itpl, itpl, printpl,itplns
50 from IPython.utils.PyColorize import Parser
50 from IPython.utils.PyColorize import Parser
51 from IPython.utils.ipstruct import Struct
51 from IPython.utils.ipstruct import Struct
52 from IPython.core.macro import Macro
52 from IPython.core.macro import Macro
53 from IPython.utils.genutils import *
53 from IPython.utils.genutils import *
54 from IPython.utils import platutils
54 from IPython.utils import platutils
55 import IPython.utils.generics
55 import IPython.utils.generics
56 from IPython.core import ipapi
56 from IPython.core import ipapi
57 from IPython.core.ipapi import UsageError
57 from IPython.core.ipapi import UsageError
58 from IPython.testing import decorators as testdec
58 from IPython.testing import decorators as testdec
59
59
60 #***************************************************************************
60 #***************************************************************************
61 # Utility functions
61 # Utility functions
62 def on_off(tag):
62 def on_off(tag):
63 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
63 """Return an ON/OFF string for a 1/0 input. Simple utility function."""
64 return ['OFF','ON'][tag]
64 return ['OFF','ON'][tag]
65
65
66 class Bunch: pass
66 class Bunch: pass
67
67
68 def compress_dhist(dh):
68 def compress_dhist(dh):
69 head, tail = dh[:-10], dh[-10:]
69 head, tail = dh[:-10], dh[-10:]
70
70
71 newhead = []
71 newhead = []
72 done = set()
72 done = set()
73 for h in head:
73 for h in head:
74 if h in done:
74 if h in done:
75 continue
75 continue
76 newhead.append(h)
76 newhead.append(h)
77 done.add(h)
77 done.add(h)
78
78
79 return newhead + tail
79 return newhead + tail
80
80
81
81
82 #***************************************************************************
82 #***************************************************************************
83 # Main class implementing Magic functionality
83 # Main class implementing Magic functionality
84 class Magic:
84 class Magic:
85 """Magic functions for InteractiveShell.
85 """Magic functions for InteractiveShell.
86
86
87 Shell functions which can be reached as %function_name. All magic
87 Shell functions which can be reached as %function_name. All magic
88 functions should accept a string, which they can parse for their own
88 functions should accept a string, which they can parse for their own
89 needs. This can make some functions easier to type, eg `%cd ../`
89 needs. This can make some functions easier to type, eg `%cd ../`
90 vs. `%cd("../")`
90 vs. `%cd("../")`
91
91
92 ALL definitions MUST begin with the prefix magic_. The user won't need it
92 ALL definitions MUST begin with the prefix magic_. The user won't need it
93 at the command line, but it is is needed in the definition. """
93 at the command line, but it is is needed in the definition. """
94
94
95 # class globals
95 # class globals
96 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
96 auto_status = ['Automagic is OFF, % prefix IS needed for magic functions.',
97 'Automagic is ON, % prefix NOT needed for magic functions.']
97 'Automagic is ON, % prefix NOT needed for magic functions.']
98
98
99 #......................................................................
99 #......................................................................
100 # some utility functions
100 # some utility functions
101
101
102 def __init__(self,shell):
102 def __init__(self,shell):
103
103
104 self.options_table = {}
104 self.options_table = {}
105 if profile is None:
105 if profile is None:
106 self.magic_prun = self.profile_missing_notice
106 self.magic_prun = self.profile_missing_notice
107 self.shell = shell
107 self.shell = shell
108
108
109 # namespace for holding state we may need
109 # namespace for holding state we may need
110 self._magic_state = Bunch()
110 self._magic_state = Bunch()
111
111
112 def profile_missing_notice(self, *args, **kwargs):
112 def profile_missing_notice(self, *args, **kwargs):
113 error("""\
113 error("""\
114 The profile module could not be found. It has been removed from the standard
114 The profile module could not be found. It has been removed from the standard
115 python packages because of its non-free license. To use profiling, install the
115 python packages because of its non-free license. To use profiling, install the
116 python-profiler package from non-free.""")
116 python-profiler package from non-free.""")
117
117
118 def default_option(self,fn,optstr):
118 def default_option(self,fn,optstr):
119 """Make an entry in the options_table for fn, with value optstr"""
119 """Make an entry in the options_table for fn, with value optstr"""
120
120
121 if fn not in self.lsmagic():
121 if fn not in self.lsmagic():
122 error("%s is not a magic function" % fn)
122 error("%s is not a magic function" % fn)
123 self.options_table[fn] = optstr
123 self.options_table[fn] = optstr
124
124
125 def lsmagic(self):
125 def lsmagic(self):
126 """Return a list of currently available magic functions.
126 """Return a list of currently available magic functions.
127
127
128 Gives a list of the bare names after mangling (['ls','cd', ...], not
128 Gives a list of the bare names after mangling (['ls','cd', ...], not
129 ['magic_ls','magic_cd',...]"""
129 ['magic_ls','magic_cd',...]"""
130
130
131 # FIXME. This needs a cleanup, in the way the magics list is built.
131 # FIXME. This needs a cleanup, in the way the magics list is built.
132
132
133 # magics in class definition
133 # magics in class definition
134 class_magic = lambda fn: fn.startswith('magic_') and \
134 class_magic = lambda fn: fn.startswith('magic_') and \
135 callable(Magic.__dict__[fn])
135 callable(Magic.__dict__[fn])
136 # in instance namespace (run-time user additions)
136 # in instance namespace (run-time user additions)
137 inst_magic = lambda fn: fn.startswith('magic_') and \
137 inst_magic = lambda fn: fn.startswith('magic_') and \
138 callable(self.__dict__[fn])
138 callable(self.__dict__[fn])
139 # and bound magics by user (so they can access self):
139 # and bound magics by user (so they can access self):
140 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
140 inst_bound_magic = lambda fn: fn.startswith('magic_') and \
141 callable(self.__class__.__dict__[fn])
141 callable(self.__class__.__dict__[fn])
142 magics = filter(class_magic,Magic.__dict__.keys()) + \
142 magics = filter(class_magic,Magic.__dict__.keys()) + \
143 filter(inst_magic,self.__dict__.keys()) + \
143 filter(inst_magic,self.__dict__.keys()) + \
144 filter(inst_bound_magic,self.__class__.__dict__.keys())
144 filter(inst_bound_magic,self.__class__.__dict__.keys())
145 out = []
145 out = []
146 for fn in set(magics):
146 for fn in set(magics):
147 out.append(fn.replace('magic_','',1))
147 out.append(fn.replace('magic_','',1))
148 out.sort()
148 out.sort()
149 return out
149 return out
150
150
151 def extract_input_slices(self,slices,raw=False):
151 def extract_input_slices(self,slices,raw=False):
152 """Return as a string a set of input history slices.
152 """Return as a string a set of input history slices.
153
153
154 Inputs:
154 Inputs:
155
155
156 - slices: the set of slices is given as a list of strings (like
156 - slices: the set of slices is given as a list of strings (like
157 ['1','4:8','9'], since this function is for use by magic functions
157 ['1','4:8','9'], since this function is for use by magic functions
158 which get their arguments as strings.
158 which get their arguments as strings.
159
159
160 Optional inputs:
160 Optional inputs:
161
161
162 - raw(False): by default, the processed input is used. If this is
162 - raw(False): by default, the processed input is used. If this is
163 true, the raw input history is used instead.
163 true, the raw input history is used instead.
164
164
165 Note that slices can be called with two notations:
165 Note that slices can be called with two notations:
166
166
167 N:M -> standard python form, means including items N...(M-1).
167 N:M -> standard python form, means including items N...(M-1).
168
168
169 N-M -> include items N..M (closed endpoint)."""
169 N-M -> include items N..M (closed endpoint)."""
170
170
171 if raw:
171 if raw:
172 hist = self.shell.input_hist_raw
172 hist = self.shell.input_hist_raw
173 else:
173 else:
174 hist = self.shell.input_hist
174 hist = self.shell.input_hist
175
175
176 cmds = []
176 cmds = []
177 for chunk in slices:
177 for chunk in slices:
178 if ':' in chunk:
178 if ':' in chunk:
179 ini,fin = map(int,chunk.split(':'))
179 ini,fin = map(int,chunk.split(':'))
180 elif '-' in chunk:
180 elif '-' in chunk:
181 ini,fin = map(int,chunk.split('-'))
181 ini,fin = map(int,chunk.split('-'))
182 fin += 1
182 fin += 1
183 else:
183 else:
184 ini = int(chunk)
184 ini = int(chunk)
185 fin = ini+1
185 fin = ini+1
186 cmds.append(hist[ini:fin])
186 cmds.append(hist[ini:fin])
187 return cmds
187 return cmds
188
188
189 def _ofind(self, oname, namespaces=None):
189 def _ofind(self, oname, namespaces=None):
190 """Find an object in the available namespaces.
190 """Find an object in the available namespaces.
191
191
192 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
192 self._ofind(oname) -> dict with keys: found,obj,ospace,ismagic
193
193
194 Has special code to detect magic functions.
194 Has special code to detect magic functions.
195 """
195 """
196
196
197 oname = oname.strip()
197 oname = oname.strip()
198
198
199 alias_ns = None
199 alias_ns = None
200 if namespaces is None:
200 if namespaces is None:
201 # Namespaces to search in:
201 # Namespaces to search in:
202 # Put them in a list. The order is important so that we
202 # Put them in a list. The order is important so that we
203 # find things in the same order that Python finds them.
203 # find things in the same order that Python finds them.
204 namespaces = [ ('Interactive', self.shell.user_ns),
204 namespaces = [ ('Interactive', self.shell.user_ns),
205 ('IPython internal', self.shell.internal_ns),
205 ('IPython internal', self.shell.internal_ns),
206 ('Python builtin', __builtin__.__dict__),
206 ('Python builtin', __builtin__.__dict__),
207 ('Alias', self.shell.alias_table),
207 ('Alias', self.shell.alias_table),
208 ]
208 ]
209 alias_ns = self.shell.alias_table
209 alias_ns = self.shell.alias_table
210
210
211 # initialize results to 'null'
211 # initialize results to 'null'
212 found = 0; obj = None; ospace = None; ds = None;
212 found = 0; obj = None; ospace = None; ds = None;
213 ismagic = 0; isalias = 0; parent = None
213 ismagic = 0; isalias = 0; parent = None
214
214
215 # Look for the given name by splitting it in parts. If the head is
215 # Look for the given name by splitting it in parts. If the head is
216 # found, then we look for all the remaining parts as members, and only
216 # found, then we look for all the remaining parts as members, and only
217 # declare success if we can find them all.
217 # declare success if we can find them all.
218 oname_parts = oname.split('.')
218 oname_parts = oname.split('.')
219 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
219 oname_head, oname_rest = oname_parts[0],oname_parts[1:]
220 for nsname,ns in namespaces:
220 for nsname,ns in namespaces:
221 try:
221 try:
222 obj = ns[oname_head]
222 obj = ns[oname_head]
223 except KeyError:
223 except KeyError:
224 continue
224 continue
225 else:
225 else:
226 #print 'oname_rest:', oname_rest # dbg
226 #print 'oname_rest:', oname_rest # dbg
227 for part in oname_rest:
227 for part in oname_rest:
228 try:
228 try:
229 parent = obj
229 parent = obj
230 obj = getattr(obj,part)
230 obj = getattr(obj,part)
231 except:
231 except:
232 # Blanket except b/c some badly implemented objects
232 # Blanket except b/c some badly implemented objects
233 # allow __getattr__ to raise exceptions other than
233 # allow __getattr__ to raise exceptions other than
234 # AttributeError, which then crashes IPython.
234 # AttributeError, which then crashes IPython.
235 break
235 break
236 else:
236 else:
237 # If we finish the for loop (no break), we got all members
237 # If we finish the for loop (no break), we got all members
238 found = 1
238 found = 1
239 ospace = nsname
239 ospace = nsname
240 if ns == alias_ns:
240 if ns == alias_ns:
241 isalias = 1
241 isalias = 1
242 break # namespace loop
242 break # namespace loop
243
243
244 # Try to see if it's magic
244 # Try to see if it's magic
245 if not found:
245 if not found:
246 if oname.startswith(self.shell.ESC_MAGIC):
246 if oname.startswith(self.shell.ESC_MAGIC):
247 oname = oname[1:]
247 oname = oname[1:]
248 obj = getattr(self,'magic_'+oname,None)
248 obj = getattr(self,'magic_'+oname,None)
249 if obj is not None:
249 if obj is not None:
250 found = 1
250 found = 1
251 ospace = 'IPython internal'
251 ospace = 'IPython internal'
252 ismagic = 1
252 ismagic = 1
253
253
254 # Last try: special-case some literals like '', [], {}, etc:
254 # Last try: special-case some literals like '', [], {}, etc:
255 if not found and oname_head in ["''",'""','[]','{}','()']:
255 if not found and oname_head in ["''",'""','[]','{}','()']:
256 obj = eval(oname_head)
256 obj = eval(oname_head)
257 found = 1
257 found = 1
258 ospace = 'Interactive'
258 ospace = 'Interactive'
259
259
260 return {'found':found, 'obj':obj, 'namespace':ospace,
260 return {'found':found, 'obj':obj, 'namespace':ospace,
261 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
261 'ismagic':ismagic, 'isalias':isalias, 'parent':parent}
262
262
263 def arg_err(self,func):
263 def arg_err(self,func):
264 """Print docstring if incorrect arguments were passed"""
264 """Print docstring if incorrect arguments were passed"""
265 print 'Error in arguments:'
265 print 'Error in arguments:'
266 print OInspect.getdoc(func)
266 print OInspect.getdoc(func)
267
267
268 def format_latex(self,strng):
268 def format_latex(self,strng):
269 """Format a string for latex inclusion."""
269 """Format a string for latex inclusion."""
270
270
271 # Characters that need to be escaped for latex:
271 # Characters that need to be escaped for latex:
272 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
272 escape_re = re.compile(r'(%|_|\$|#|&)',re.MULTILINE)
273 # Magic command names as headers:
273 # Magic command names as headers:
274 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
274 cmd_name_re = re.compile(r'^(%s.*?):' % self.shell.ESC_MAGIC,
275 re.MULTILINE)
275 re.MULTILINE)
276 # Magic commands
276 # Magic commands
277 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
277 cmd_re = re.compile(r'(?P<cmd>%s.+?\b)(?!\}\}:)' % self.shell.ESC_MAGIC,
278 re.MULTILINE)
278 re.MULTILINE)
279 # Paragraph continue
279 # Paragraph continue
280 par_re = re.compile(r'\\$',re.MULTILINE)
280 par_re = re.compile(r'\\$',re.MULTILINE)
281
281
282 # The "\n" symbol
282 # The "\n" symbol
283 newline_re = re.compile(r'\\n')
283 newline_re = re.compile(r'\\n')
284
284
285 # Now build the string for output:
285 # Now build the string for output:
286 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
286 #strng = cmd_name_re.sub(r'\n\\texttt{\\textsl{\\large \1}}:',strng)
287 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
287 strng = cmd_name_re.sub(r'\n\\bigskip\n\\texttt{\\textbf{ \1}}:',
288 strng)
288 strng)
289 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
289 strng = cmd_re.sub(r'\\texttt{\g<cmd>}',strng)
290 strng = par_re.sub(r'\\\\',strng)
290 strng = par_re.sub(r'\\\\',strng)
291 strng = escape_re.sub(r'\\\1',strng)
291 strng = escape_re.sub(r'\\\1',strng)
292 strng = newline_re.sub(r'\\textbackslash{}n',strng)
292 strng = newline_re.sub(r'\\textbackslash{}n',strng)
293 return strng
293 return strng
294
294
295 def format_screen(self,strng):
295 def format_screen(self,strng):
296 """Format a string for screen printing.
296 """Format a string for screen printing.
297
297
298 This removes some latex-type format codes."""
298 This removes some latex-type format codes."""
299 # Paragraph continue
299 # Paragraph continue
300 par_re = re.compile(r'\\$',re.MULTILINE)
300 par_re = re.compile(r'\\$',re.MULTILINE)
301 strng = par_re.sub('',strng)
301 strng = par_re.sub('',strng)
302 return strng
302 return strng
303
303
304 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
304 def parse_options(self,arg_str,opt_str,*long_opts,**kw):
305 """Parse options passed to an argument string.
305 """Parse options passed to an argument string.
306
306
307 The interface is similar to that of getopt(), but it returns back a
307 The interface is similar to that of getopt(), but it returns back a
308 Struct with the options as keys and the stripped argument string still
308 Struct with the options as keys and the stripped argument string still
309 as a string.
309 as a string.
310
310
311 arg_str is quoted as a true sys.argv vector by using shlex.split.
311 arg_str is quoted as a true sys.argv vector by using shlex.split.
312 This allows us to easily expand variables, glob files, quote
312 This allows us to easily expand variables, glob files, quote
313 arguments, etc.
313 arguments, etc.
314
314
315 Options:
315 Options:
316 -mode: default 'string'. If given as 'list', the argument string is
316 -mode: default 'string'. If given as 'list', the argument string is
317 returned as a list (split on whitespace) instead of a string.
317 returned as a list (split on whitespace) instead of a string.
318
318
319 -list_all: put all option values in lists. Normally only options
319 -list_all: put all option values in lists. Normally only options
320 appearing more than once are put in a list.
320 appearing more than once are put in a list.
321
321
322 -posix (True): whether to split the input line in POSIX mode or not,
322 -posix (True): whether to split the input line in POSIX mode or not,
323 as per the conventions outlined in the shlex module from the
323 as per the conventions outlined in the shlex module from the
324 standard library."""
324 standard library."""
325
325
326 # inject default options at the beginning of the input line
326 # inject default options at the beginning of the input line
327 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
327 caller = sys._getframe(1).f_code.co_name.replace('magic_','')
328 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
328 arg_str = '%s %s' % (self.options_table.get(caller,''),arg_str)
329
329
330 mode = kw.get('mode','string')
330 mode = kw.get('mode','string')
331 if mode not in ['string','list']:
331 if mode not in ['string','list']:
332 raise ValueError,'incorrect mode given: %s' % mode
332 raise ValueError,'incorrect mode given: %s' % mode
333 # Get options
333 # Get options
334 list_all = kw.get('list_all',0)
334 list_all = kw.get('list_all',0)
335 posix = kw.get('posix',True)
335 posix = kw.get('posix',True)
336
336
337 # Check if we have more than one argument to warrant extra processing:
337 # Check if we have more than one argument to warrant extra processing:
338 odict = {} # Dictionary with options
338 odict = {} # Dictionary with options
339 args = arg_str.split()
339 args = arg_str.split()
340 if len(args) >= 1:
340 if len(args) >= 1:
341 # If the list of inputs only has 0 or 1 thing in it, there's no
341 # If the list of inputs only has 0 or 1 thing in it, there's no
342 # need to look for options
342 # need to look for options
343 argv = arg_split(arg_str,posix)
343 argv = arg_split(arg_str,posix)
344 # Do regular option processing
344 # Do regular option processing
345 try:
345 try:
346 opts,args = getopt(argv,opt_str,*long_opts)
346 opts,args = getopt(argv,opt_str,*long_opts)
347 except GetoptError,e:
347 except GetoptError,e:
348 raise UsageError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
348 raise UsageError('%s ( allowed: "%s" %s)' % (e.msg,opt_str,
349 " ".join(long_opts)))
349 " ".join(long_opts)))
350 for o,a in opts:
350 for o,a in opts:
351 if o.startswith('--'):
351 if o.startswith('--'):
352 o = o[2:]
352 o = o[2:]
353 else:
353 else:
354 o = o[1:]
354 o = o[1:]
355 try:
355 try:
356 odict[o].append(a)
356 odict[o].append(a)
357 except AttributeError:
357 except AttributeError:
358 odict[o] = [odict[o],a]
358 odict[o] = [odict[o],a]
359 except KeyError:
359 except KeyError:
360 if list_all:
360 if list_all:
361 odict[o] = [a]
361 odict[o] = [a]
362 else:
362 else:
363 odict[o] = a
363 odict[o] = a
364
364
365 # Prepare opts,args for return
365 # Prepare opts,args for return
366 opts = Struct(odict)
366 opts = Struct(odict)
367 if mode == 'string':
367 if mode == 'string':
368 args = ' '.join(args)
368 args = ' '.join(args)
369
369
370 return opts,args
370 return opts,args
371
371
372 #......................................................................
372 #......................................................................
373 # And now the actual magic functions
373 # And now the actual magic functions
374
374
375 # Functions for IPython shell work (vars,funcs, config, etc)
375 # Functions for IPython shell work (vars,funcs, config, etc)
376 def magic_lsmagic(self, parameter_s = ''):
376 def magic_lsmagic(self, parameter_s = ''):
377 """List currently available magic functions."""
377 """List currently available magic functions."""
378 mesc = self.shell.ESC_MAGIC
378 mesc = self.shell.ESC_MAGIC
379 print 'Available magic functions:\n'+mesc+\
379 print 'Available magic functions:\n'+mesc+\
380 (' '+mesc).join(self.lsmagic())
380 (' '+mesc).join(self.lsmagic())
381 print '\n' + Magic.auto_status[self.shell.rc.automagic]
381 print '\n' + Magic.auto_status[self.shell.rc.automagic]
382 return None
382 return None
383
383
384 def magic_magic(self, parameter_s = ''):
384 def magic_magic(self, parameter_s = ''):
385 """Print information about the magic function system.
385 """Print information about the magic function system.
386
386
387 Supported formats: -latex, -brief, -rest
387 Supported formats: -latex, -brief, -rest
388 """
388 """
389
389
390 mode = ''
390 mode = ''
391 try:
391 try:
392 if parameter_s.split()[0] == '-latex':
392 if parameter_s.split()[0] == '-latex':
393 mode = 'latex'
393 mode = 'latex'
394 if parameter_s.split()[0] == '-brief':
394 if parameter_s.split()[0] == '-brief':
395 mode = 'brief'
395 mode = 'brief'
396 if parameter_s.split()[0] == '-rest':
396 if parameter_s.split()[0] == '-rest':
397 mode = 'rest'
397 mode = 'rest'
398 rest_docs = []
398 rest_docs = []
399 except:
399 except:
400 pass
400 pass
401
401
402 magic_docs = []
402 magic_docs = []
403 for fname in self.lsmagic():
403 for fname in self.lsmagic():
404 mname = 'magic_' + fname
404 mname = 'magic_' + fname
405 for space in (Magic,self,self.__class__):
405 for space in (Magic,self,self.__class__):
406 try:
406 try:
407 fn = space.__dict__[mname]
407 fn = space.__dict__[mname]
408 except KeyError:
408 except KeyError:
409 pass
409 pass
410 else:
410 else:
411 break
411 break
412 if mode == 'brief':
412 if mode == 'brief':
413 # only first line
413 # only first line
414 if fn.__doc__:
414 if fn.__doc__:
415 fndoc = fn.__doc__.split('\n',1)[0]
415 fndoc = fn.__doc__.split('\n',1)[0]
416 else:
416 else:
417 fndoc = 'No documentation'
417 fndoc = 'No documentation'
418 else:
418 else:
419 if fn.__doc__:
419 if fn.__doc__:
420 fndoc = fn.__doc__.rstrip()
420 fndoc = fn.__doc__.rstrip()
421 else:
421 else:
422 fndoc = 'No documentation'
422 fndoc = 'No documentation'
423
423
424
424
425 if mode == 'rest':
425 if mode == 'rest':
426 rest_docs.append('**%s%s**::\n\n\t%s\n\n' %(self.shell.ESC_MAGIC,
426 rest_docs.append('**%s%s**::\n\n\t%s\n\n' %(self.shell.ESC_MAGIC,
427 fname,fndoc))
427 fname,fndoc))
428
428
429 else:
429 else:
430 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
430 magic_docs.append('%s%s:\n\t%s\n' %(self.shell.ESC_MAGIC,
431 fname,fndoc))
431 fname,fndoc))
432
432
433 magic_docs = ''.join(magic_docs)
433 magic_docs = ''.join(magic_docs)
434
434
435 if mode == 'rest':
435 if mode == 'rest':
436 return "".join(rest_docs)
436 return "".join(rest_docs)
437
437
438 if mode == 'latex':
438 if mode == 'latex':
439 print self.format_latex(magic_docs)
439 print self.format_latex(magic_docs)
440 return
440 return
441 else:
441 else:
442 magic_docs = self.format_screen(magic_docs)
442 magic_docs = self.format_screen(magic_docs)
443 if mode == 'brief':
443 if mode == 'brief':
444 return magic_docs
444 return magic_docs
445
445
446 outmsg = """
446 outmsg = """
447 IPython's 'magic' functions
447 IPython's 'magic' functions
448 ===========================
448 ===========================
449
449
450 The magic function system provides a series of functions which allow you to
450 The magic function system provides a series of functions which allow you to
451 control the behavior of IPython itself, plus a lot of system-type
451 control the behavior of IPython itself, plus a lot of system-type
452 features. All these functions are prefixed with a % character, but parameters
452 features. All these functions are prefixed with a % character, but parameters
453 are given without parentheses or quotes.
453 are given without parentheses or quotes.
454
454
455 NOTE: If you have 'automagic' enabled (via the command line option or with the
455 NOTE: If you have 'automagic' enabled (via the command line option or with the
456 %automagic function), you don't need to type in the % explicitly. By default,
456 %automagic function), you don't need to type in the % explicitly. By default,
457 IPython ships with automagic on, so you should only rarely need the % escape.
457 IPython ships with automagic on, so you should only rarely need the % escape.
458
458
459 Example: typing '%cd mydir' (without the quotes) changes you working directory
459 Example: typing '%cd mydir' (without the quotes) changes you working directory
460 to 'mydir', if it exists.
460 to 'mydir', if it exists.
461
461
462 You can define your own magic functions to extend the system. See the supplied
462 You can define your own magic functions to extend the system. See the supplied
463 ipythonrc and example-magic.py files for details (in your ipython
463 ipythonrc and example-magic.py files for details (in your ipython
464 configuration directory, typically $HOME/.ipython/).
464 configuration directory, typically $HOME/.ipython/).
465
465
466 You can also define your own aliased names for magic functions. In your
466 You can also define your own aliased names for magic functions. In your
467 ipythonrc file, placing a line like:
467 ipythonrc file, placing a line like:
468
468
469 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
469 execute __IPYTHON__.magic_pf = __IPYTHON__.magic_profile
470
470
471 will define %pf as a new name for %profile.
471 will define %pf as a new name for %profile.
472
472
473 You can also call magics in code using the ipmagic() function, which IPython
473 You can also call magics in code using the ipmagic() function, which IPython
474 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
474 automatically adds to the builtin namespace. Type 'ipmagic?' for details.
475
475
476 For a list of the available magic functions, use %lsmagic. For a description
476 For a list of the available magic functions, use %lsmagic. For a description
477 of any of them, type %magic_name?, e.g. '%cd?'.
477 of any of them, type %magic_name?, e.g. '%cd?'.
478
478
479 Currently the magic system has the following functions:\n"""
479 Currently the magic system has the following functions:\n"""
480
480
481 mesc = self.shell.ESC_MAGIC
481 mesc = self.shell.ESC_MAGIC
482 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
482 outmsg = ("%s\n%s\n\nSummary of magic functions (from %slsmagic):"
483 "\n\n%s%s\n\n%s" % (outmsg,
483 "\n\n%s%s\n\n%s" % (outmsg,
484 magic_docs,mesc,mesc,
484 magic_docs,mesc,mesc,
485 (' '+mesc).join(self.lsmagic()),
485 (' '+mesc).join(self.lsmagic()),
486 Magic.auto_status[self.shell.rc.automagic] ) )
486 Magic.auto_status[self.shell.rc.automagic] ) )
487
487
488 page(outmsg,screen_lines=self.shell.rc.screen_length)
488 page(outmsg,screen_lines=self.shell.rc.screen_length)
489
489
490
490
491 def magic_autoindent(self, parameter_s = ''):
491 def magic_autoindent(self, parameter_s = ''):
492 """Toggle autoindent on/off (if available)."""
492 """Toggle autoindent on/off (if available)."""
493
493
494 self.shell.set_autoindent()
494 self.shell.set_autoindent()
495 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
495 print "Automatic indentation is:",['OFF','ON'][self.shell.autoindent]
496
496
497
497
498 def magic_automagic(self, parameter_s = ''):
498 def magic_automagic(self, parameter_s = ''):
499 """Make magic functions callable without having to type the initial %.
499 """Make magic functions callable without having to type the initial %.
500
500
501 Without argumentsl toggles on/off (when off, you must call it as
501 Without argumentsl toggles on/off (when off, you must call it as
502 %automagic, of course). With arguments it sets the value, and you can
502 %automagic, of course). With arguments it sets the value, and you can
503 use any of (case insensitive):
503 use any of (case insensitive):
504
504
505 - on,1,True: to activate
505 - on,1,True: to activate
506
506
507 - off,0,False: to deactivate.
507 - off,0,False: to deactivate.
508
508
509 Note that magic functions have lowest priority, so if there's a
509 Note that magic functions have lowest priority, so if there's a
510 variable whose name collides with that of a magic fn, automagic won't
510 variable whose name collides with that of a magic fn, automagic won't
511 work for that function (you get the variable instead). However, if you
511 work for that function (you get the variable instead). However, if you
512 delete the variable (del var), the previously shadowed magic function
512 delete the variable (del var), the previously shadowed magic function
513 becomes visible to automagic again."""
513 becomes visible to automagic again."""
514
514
515 rc = self.shell.rc
515 rc = self.shell.rc
516 arg = parameter_s.lower()
516 arg = parameter_s.lower()
517 if parameter_s in ('on','1','true'):
517 if parameter_s in ('on','1','true'):
518 rc.automagic = True
518 rc.automagic = True
519 elif parameter_s in ('off','0','false'):
519 elif parameter_s in ('off','0','false'):
520 rc.automagic = False
520 rc.automagic = False
521 else:
521 else:
522 rc.automagic = not rc.automagic
522 rc.automagic = not rc.automagic
523 print '\n' + Magic.auto_status[rc.automagic]
523 print '\n' + Magic.auto_status[rc.automagic]
524
524
525 @testdec.skip_doctest
525 @testdec.skip_doctest
526 def magic_autocall(self, parameter_s = ''):
526 def magic_autocall(self, parameter_s = ''):
527 """Make functions callable without having to type parentheses.
527 """Make functions callable without having to type parentheses.
528
528
529 Usage:
529 Usage:
530
530
531 %autocall [mode]
531 %autocall [mode]
532
532
533 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
533 The mode can be one of: 0->Off, 1->Smart, 2->Full. If not given, the
534 value is toggled on and off (remembering the previous state).
534 value is toggled on and off (remembering the previous state).
535
535
536 In more detail, these values mean:
536 In more detail, these values mean:
537
537
538 0 -> fully disabled
538 0 -> fully disabled
539
539
540 1 -> active, but do not apply if there are no arguments on the line.
540 1 -> active, but do not apply if there are no arguments on the line.
541
541
542 In this mode, you get:
542 In this mode, you get:
543
543
544 In [1]: callable
544 In [1]: callable
545 Out[1]: <built-in function callable>
545 Out[1]: <built-in function callable>
546
546
547 In [2]: callable 'hello'
547 In [2]: callable 'hello'
548 ------> callable('hello')
548 ------> callable('hello')
549 Out[2]: False
549 Out[2]: False
550
550
551 2 -> Active always. Even if no arguments are present, the callable
551 2 -> Active always. Even if no arguments are present, the callable
552 object is called:
552 object is called:
553
553
554 In [2]: float
554 In [2]: float
555 ------> float()
555 ------> float()
556 Out[2]: 0.0
556 Out[2]: 0.0
557
557
558 Note that even with autocall off, you can still use '/' at the start of
558 Note that even with autocall off, you can still use '/' at the start of
559 a line to treat the first argument on the command line as a function
559 a line to treat the first argument on the command line as a function
560 and add parentheses to it:
560 and add parentheses to it:
561
561
562 In [8]: /str 43
562 In [8]: /str 43
563 ------> str(43)
563 ------> str(43)
564 Out[8]: '43'
564 Out[8]: '43'
565
565
566 # all-random (note for auto-testing)
566 # all-random (note for auto-testing)
567 """
567 """
568
568
569 rc = self.shell.rc
569 rc = self.shell.rc
570
570
571 if parameter_s:
571 if parameter_s:
572 arg = int(parameter_s)
572 arg = int(parameter_s)
573 else:
573 else:
574 arg = 'toggle'
574 arg = 'toggle'
575
575
576 if not arg in (0,1,2,'toggle'):
576 if not arg in (0,1,2,'toggle'):
577 error('Valid modes: (0->Off, 1->Smart, 2->Full')
577 error('Valid modes: (0->Off, 1->Smart, 2->Full')
578 return
578 return
579
579
580 if arg in (0,1,2):
580 if arg in (0,1,2):
581 rc.autocall = arg
581 rc.autocall = arg
582 else: # toggle
582 else: # toggle
583 if rc.autocall:
583 if rc.autocall:
584 self._magic_state.autocall_save = rc.autocall
584 self._magic_state.autocall_save = rc.autocall
585 rc.autocall = 0
585 rc.autocall = 0
586 else:
586 else:
587 try:
587 try:
588 rc.autocall = self._magic_state.autocall_save
588 rc.autocall = self._magic_state.autocall_save
589 except AttributeError:
589 except AttributeError:
590 rc.autocall = self._magic_state.autocall_save = 1
590 rc.autocall = self._magic_state.autocall_save = 1
591
591
592 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
592 print "Automatic calling is:",['OFF','Smart','Full'][rc.autocall]
593
593
594 def magic_system_verbose(self, parameter_s = ''):
594 def magic_system_verbose(self, parameter_s = ''):
595 """Set verbose printing of system calls.
595 """Set verbose printing of system calls.
596
596
597 If called without an argument, act as a toggle"""
597 If called without an argument, act as a toggle"""
598
598
599 if parameter_s:
599 if parameter_s:
600 val = bool(eval(parameter_s))
600 val = bool(eval(parameter_s))
601 else:
601 else:
602 val = None
602 val = None
603
603
604 self.shell.rc_set_toggle('system_verbose',val)
604 self.shell.rc_set_toggle('system_verbose',val)
605 print "System verbose printing is:",\
605 print "System verbose printing is:",\
606 ['OFF','ON'][self.shell.rc.system_verbose]
606 ['OFF','ON'][self.shell.rc.system_verbose]
607
607
608
608
609 def magic_page(self, parameter_s=''):
609 def magic_page(self, parameter_s=''):
610 """Pretty print the object and display it through a pager.
610 """Pretty print the object and display it through a pager.
611
611
612 %page [options] OBJECT
612 %page [options] OBJECT
613
613
614 If no object is given, use _ (last output).
614 If no object is given, use _ (last output).
615
615
616 Options:
616 Options:
617
617
618 -r: page str(object), don't pretty-print it."""
618 -r: page str(object), don't pretty-print it."""
619
619
620 # After a function contributed by Olivier Aubert, slightly modified.
620 # After a function contributed by Olivier Aubert, slightly modified.
621
621
622 # Process options/args
622 # Process options/args
623 opts,args = self.parse_options(parameter_s,'r')
623 opts,args = self.parse_options(parameter_s,'r')
624 raw = 'r' in opts
624 raw = 'r' in opts
625
625
626 oname = args and args or '_'
626 oname = args and args or '_'
627 info = self._ofind(oname)
627 info = self._ofind(oname)
628 if info['found']:
628 if info['found']:
629 txt = (raw and str or pformat)( info['obj'] )
629 txt = (raw and str or pformat)( info['obj'] )
630 page(txt)
630 page(txt)
631 else:
631 else:
632 print 'Object `%s` not found' % oname
632 print 'Object `%s` not found' % oname
633
633
634 def magic_profile(self, parameter_s=''):
634 def magic_profile(self, parameter_s=''):
635 """Print your currently active IPyhton profile."""
635 """Print your currently active IPyhton profile."""
636 if self.shell.rc.profile:
636 if self.shell.rc.profile:
637 printpl('Current IPython profile: $self.shell.rc.profile.')
637 printpl('Current IPython profile: $self.shell.rc.profile.')
638 else:
638 else:
639 print 'No profile active.'
639 print 'No profile active.'
640
640
641 def magic_pinfo(self, parameter_s='', namespaces=None):
641 def magic_pinfo(self, parameter_s='', namespaces=None):
642 """Provide detailed information about an object.
642 """Provide detailed information about an object.
643
643
644 '%pinfo object' is just a synonym for object? or ?object."""
644 '%pinfo object' is just a synonym for object? or ?object."""
645
645
646 #print 'pinfo par: <%s>' % parameter_s # dbg
646 #print 'pinfo par: <%s>' % parameter_s # dbg
647
647
648
648
649 # detail_level: 0 -> obj? , 1 -> obj??
649 # detail_level: 0 -> obj? , 1 -> obj??
650 detail_level = 0
650 detail_level = 0
651 # We need to detect if we got called as 'pinfo pinfo foo', which can
651 # We need to detect if we got called as 'pinfo pinfo foo', which can
652 # happen if the user types 'pinfo foo?' at the cmd line.
652 # happen if the user types 'pinfo foo?' at the cmd line.
653 pinfo,qmark1,oname,qmark2 = \
653 pinfo,qmark1,oname,qmark2 = \
654 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
654 re.match('(pinfo )?(\?*)(.*?)(\??$)',parameter_s).groups()
655 if pinfo or qmark1 or qmark2:
655 if pinfo or qmark1 or qmark2:
656 detail_level = 1
656 detail_level = 1
657 if "*" in oname:
657 if "*" in oname:
658 self.magic_psearch(oname)
658 self.magic_psearch(oname)
659 else:
659 else:
660 self._inspect('pinfo', oname, detail_level=detail_level,
660 self._inspect('pinfo', oname, detail_level=detail_level,
661 namespaces=namespaces)
661 namespaces=namespaces)
662
662
663 def magic_pdef(self, parameter_s='', namespaces=None):
663 def magic_pdef(self, parameter_s='', namespaces=None):
664 """Print the definition header for any callable object.
664 """Print the definition header for any callable object.
665
665
666 If the object is a class, print the constructor information."""
666 If the object is a class, print the constructor information."""
667 self._inspect('pdef',parameter_s, namespaces)
667 self._inspect('pdef',parameter_s, namespaces)
668
668
669 def magic_pdoc(self, parameter_s='', namespaces=None):
669 def magic_pdoc(self, parameter_s='', namespaces=None):
670 """Print the docstring for an object.
670 """Print the docstring for an object.
671
671
672 If the given object is a class, it will print both the class and the
672 If the given object is a class, it will print both the class and the
673 constructor docstrings."""
673 constructor docstrings."""
674 self._inspect('pdoc',parameter_s, namespaces)
674 self._inspect('pdoc',parameter_s, namespaces)
675
675
676 def magic_psource(self, parameter_s='', namespaces=None):
676 def magic_psource(self, parameter_s='', namespaces=None):
677 """Print (or run through pager) the source code for an object."""
677 """Print (or run through pager) the source code for an object."""
678 self._inspect('psource',parameter_s, namespaces)
678 self._inspect('psource',parameter_s, namespaces)
679
679
680 def magic_pfile(self, parameter_s=''):
680 def magic_pfile(self, parameter_s=''):
681 """Print (or run through pager) the file where an object is defined.
681 """Print (or run through pager) the file where an object is defined.
682
682
683 The file opens at the line where the object definition begins. IPython
683 The file opens at the line where the object definition begins. IPython
684 will honor the environment variable PAGER if set, and otherwise will
684 will honor the environment variable PAGER if set, and otherwise will
685 do its best to print the file in a convenient form.
685 do its best to print the file in a convenient form.
686
686
687 If the given argument is not an object currently defined, IPython will
687 If the given argument is not an object currently defined, IPython will
688 try to interpret it as a filename (automatically adding a .py extension
688 try to interpret it as a filename (automatically adding a .py extension
689 if needed). You can thus use %pfile as a syntax highlighting code
689 if needed). You can thus use %pfile as a syntax highlighting code
690 viewer."""
690 viewer."""
691
691
692 # first interpret argument as an object name
692 # first interpret argument as an object name
693 out = self._inspect('pfile',parameter_s)
693 out = self._inspect('pfile',parameter_s)
694 # if not, try the input as a filename
694 # if not, try the input as a filename
695 if out == 'not found':
695 if out == 'not found':
696 try:
696 try:
697 filename = get_py_filename(parameter_s)
697 filename = get_py_filename(parameter_s)
698 except IOError,msg:
698 except IOError,msg:
699 print msg
699 print msg
700 return
700 return
701 page(self.shell.inspector.format(file(filename).read()))
701 page(self.shell.inspector.format(file(filename).read()))
702
702
703 def _inspect(self,meth,oname,namespaces=None,**kw):
703 def _inspect(self,meth,oname,namespaces=None,**kw):
704 """Generic interface to the inspector system.
704 """Generic interface to the inspector system.
705
705
706 This function is meant to be called by pdef, pdoc & friends."""
706 This function is meant to be called by pdef, pdoc & friends."""
707
707
708 #oname = oname.strip()
708 #oname = oname.strip()
709 #print '1- oname: <%r>' % oname # dbg
709 #print '1- oname: <%r>' % oname # dbg
710 try:
710 try:
711 oname = oname.strip().encode('ascii')
711 oname = oname.strip().encode('ascii')
712 #print '2- oname: <%r>' % oname # dbg
712 #print '2- oname: <%r>' % oname # dbg
713 except UnicodeEncodeError:
713 except UnicodeEncodeError:
714 print 'Python identifiers can only contain ascii characters.'
714 print 'Python identifiers can only contain ascii characters.'
715 return 'not found'
715 return 'not found'
716
716
717 info = Struct(self._ofind(oname, namespaces))
717 info = Struct(self._ofind(oname, namespaces))
718
718
719 if info.found:
719 if info.found:
720 try:
720 try:
721 IPython.utils.generics.inspect_object(info.obj)
721 IPython.utils.generics.inspect_object(info.obj)
722 return
722 return
723 except ipapi.TryNext:
723 except ipapi.TryNext:
724 pass
724 pass
725 # Get the docstring of the class property if it exists.
725 # Get the docstring of the class property if it exists.
726 path = oname.split('.')
726 path = oname.split('.')
727 root = '.'.join(path[:-1])
727 root = '.'.join(path[:-1])
728 if info.parent is not None:
728 if info.parent is not None:
729 try:
729 try:
730 target = getattr(info.parent, '__class__')
730 target = getattr(info.parent, '__class__')
731 # The object belongs to a class instance.
731 # The object belongs to a class instance.
732 try:
732 try:
733 target = getattr(target, path[-1])
733 target = getattr(target, path[-1])
734 # The class defines the object.
734 # The class defines the object.
735 if isinstance(target, property):
735 if isinstance(target, property):
736 oname = root + '.__class__.' + path[-1]
736 oname = root + '.__class__.' + path[-1]
737 info = Struct(self._ofind(oname))
737 info = Struct(self._ofind(oname))
738 except AttributeError: pass
738 except AttributeError: pass
739 except AttributeError: pass
739 except AttributeError: pass
740
740
741 pmethod = getattr(self.shell.inspector,meth)
741 pmethod = getattr(self.shell.inspector,meth)
742 formatter = info.ismagic and self.format_screen or None
742 formatter = info.ismagic and self.format_screen or None
743 if meth == 'pdoc':
743 if meth == 'pdoc':
744 pmethod(info.obj,oname,formatter)
744 pmethod(info.obj,oname,formatter)
745 elif meth == 'pinfo':
745 elif meth == 'pinfo':
746 pmethod(info.obj,oname,formatter,info,**kw)
746 pmethod(info.obj,oname,formatter,info,**kw)
747 else:
747 else:
748 pmethod(info.obj,oname)
748 pmethod(info.obj,oname)
749 else:
749 else:
750 print 'Object `%s` not found.' % oname
750 print 'Object `%s` not found.' % oname
751 return 'not found' # so callers can take other action
751 return 'not found' # so callers can take other action
752
752
753 def magic_psearch(self, parameter_s=''):
753 def magic_psearch(self, parameter_s=''):
754 """Search for object in namespaces by wildcard.
754 """Search for object in namespaces by wildcard.
755
755
756 %psearch [options] PATTERN [OBJECT TYPE]
756 %psearch [options] PATTERN [OBJECT TYPE]
757
757
758 Note: ? can be used as a synonym for %psearch, at the beginning or at
758 Note: ? can be used as a synonym for %psearch, at the beginning or at
759 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
759 the end: both a*? and ?a* are equivalent to '%psearch a*'. Still, the
760 rest of the command line must be unchanged (options come first), so
760 rest of the command line must be unchanged (options come first), so
761 for example the following forms are equivalent
761 for example the following forms are equivalent
762
762
763 %psearch -i a* function
763 %psearch -i a* function
764 -i a* function?
764 -i a* function?
765 ?-i a* function
765 ?-i a* function
766
766
767 Arguments:
767 Arguments:
768
768
769 PATTERN
769 PATTERN
770
770
771 where PATTERN is a string containing * as a wildcard similar to its
771 where PATTERN is a string containing * as a wildcard similar to its
772 use in a shell. The pattern is matched in all namespaces on the
772 use in a shell. The pattern is matched in all namespaces on the
773 search path. By default objects starting with a single _ are not
773 search path. By default objects starting with a single _ are not
774 matched, many IPython generated objects have a single
774 matched, many IPython generated objects have a single
775 underscore. The default is case insensitive matching. Matching is
775 underscore. The default is case insensitive matching. Matching is
776 also done on the attributes of objects and not only on the objects
776 also done on the attributes of objects and not only on the objects
777 in a module.
777 in a module.
778
778
779 [OBJECT TYPE]
779 [OBJECT TYPE]
780
780
781 Is the name of a python type from the types module. The name is
781 Is the name of a python type from the types module. The name is
782 given in lowercase without the ending type, ex. StringType is
782 given in lowercase without the ending type, ex. StringType is
783 written string. By adding a type here only objects matching the
783 written string. By adding a type here only objects matching the
784 given type are matched. Using all here makes the pattern match all
784 given type are matched. Using all here makes the pattern match all
785 types (this is the default).
785 types (this is the default).
786
786
787 Options:
787 Options:
788
788
789 -a: makes the pattern match even objects whose names start with a
789 -a: makes the pattern match even objects whose names start with a
790 single underscore. These names are normally ommitted from the
790 single underscore. These names are normally ommitted from the
791 search.
791 search.
792
792
793 -i/-c: make the pattern case insensitive/sensitive. If neither of
793 -i/-c: make the pattern case insensitive/sensitive. If neither of
794 these options is given, the default is read from your ipythonrc
794 these options is given, the default is read from your ipythonrc
795 file. The option name which sets this value is
795 file. The option name which sets this value is
796 'wildcards_case_sensitive'. If this option is not specified in your
796 'wildcards_case_sensitive'. If this option is not specified in your
797 ipythonrc file, IPython's internal default is to do a case sensitive
797 ipythonrc file, IPython's internal default is to do a case sensitive
798 search.
798 search.
799
799
800 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
800 -e/-s NAMESPACE: exclude/search a given namespace. The pattern you
801 specifiy can be searched in any of the following namespaces:
801 specifiy can be searched in any of the following namespaces:
802 'builtin', 'user', 'user_global','internal', 'alias', where
802 'builtin', 'user', 'user_global','internal', 'alias', where
803 'builtin' and 'user' are the search defaults. Note that you should
803 'builtin' and 'user' are the search defaults. Note that you should
804 not use quotes when specifying namespaces.
804 not use quotes when specifying namespaces.
805
805
806 'Builtin' contains the python module builtin, 'user' contains all
806 'Builtin' contains the python module builtin, 'user' contains all
807 user data, 'alias' only contain the shell aliases and no python
807 user data, 'alias' only contain the shell aliases and no python
808 objects, 'internal' contains objects used by IPython. The
808 objects, 'internal' contains objects used by IPython. The
809 'user_global' namespace is only used by embedded IPython instances,
809 'user_global' namespace is only used by embedded IPython instances,
810 and it contains module-level globals. You can add namespaces to the
810 and it contains module-level globals. You can add namespaces to the
811 search with -s or exclude them with -e (these options can be given
811 search with -s or exclude them with -e (these options can be given
812 more than once).
812 more than once).
813
813
814 Examples:
814 Examples:
815
815
816 %psearch a* -> objects beginning with an a
816 %psearch a* -> objects beginning with an a
817 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
817 %psearch -e builtin a* -> objects NOT in the builtin space starting in a
818 %psearch a* function -> all functions beginning with an a
818 %psearch a* function -> all functions beginning with an a
819 %psearch re.e* -> objects beginning with an e in module re
819 %psearch re.e* -> objects beginning with an e in module re
820 %psearch r*.e* -> objects that start with e in modules starting in r
820 %psearch r*.e* -> objects that start with e in modules starting in r
821 %psearch r*.* string -> all strings in modules beginning with r
821 %psearch r*.* string -> all strings in modules beginning with r
822
822
823 Case sensitve search:
823 Case sensitve search:
824
824
825 %psearch -c a* list all object beginning with lower case a
825 %psearch -c a* list all object beginning with lower case a
826
826
827 Show objects beginning with a single _:
827 Show objects beginning with a single _:
828
828
829 %psearch -a _* list objects beginning with a single underscore"""
829 %psearch -a _* list objects beginning with a single underscore"""
830 try:
830 try:
831 parameter_s = parameter_s.encode('ascii')
831 parameter_s = parameter_s.encode('ascii')
832 except UnicodeEncodeError:
832 except UnicodeEncodeError:
833 print 'Python identifiers can only contain ascii characters.'
833 print 'Python identifiers can only contain ascii characters.'
834 return
834 return
835
835
836 # default namespaces to be searched
836 # default namespaces to be searched
837 def_search = ['user','builtin']
837 def_search = ['user','builtin']
838
838
839 # Process options/args
839 # Process options/args
840 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
840 opts,args = self.parse_options(parameter_s,'cias:e:',list_all=True)
841 opt = opts.get
841 opt = opts.get
842 shell = self.shell
842 shell = self.shell
843 psearch = shell.inspector.psearch
843 psearch = shell.inspector.psearch
844
844
845 # select case options
845 # select case options
846 if opts.has_key('i'):
846 if opts.has_key('i'):
847 ignore_case = True
847 ignore_case = True
848 elif opts.has_key('c'):
848 elif opts.has_key('c'):
849 ignore_case = False
849 ignore_case = False
850 else:
850 else:
851 ignore_case = not shell.rc.wildcards_case_sensitive
851 ignore_case = not shell.rc.wildcards_case_sensitive
852
852
853 # Build list of namespaces to search from user options
853 # Build list of namespaces to search from user options
854 def_search.extend(opt('s',[]))
854 def_search.extend(opt('s',[]))
855 ns_exclude = ns_exclude=opt('e',[])
855 ns_exclude = ns_exclude=opt('e',[])
856 ns_search = [nm for nm in def_search if nm not in ns_exclude]
856 ns_search = [nm for nm in def_search if nm not in ns_exclude]
857
857
858 # Call the actual search
858 # Call the actual search
859 try:
859 try:
860 psearch(args,shell.ns_table,ns_search,
860 psearch(args,shell.ns_table,ns_search,
861 show_all=opt('a'),ignore_case=ignore_case)
861 show_all=opt('a'),ignore_case=ignore_case)
862 except:
862 except:
863 shell.showtraceback()
863 shell.showtraceback()
864
864
865 def magic_who_ls(self, parameter_s=''):
865 def magic_who_ls(self, parameter_s=''):
866 """Return a sorted list of all interactive variables.
866 """Return a sorted list of all interactive variables.
867
867
868 If arguments are given, only variables of types matching these
868 If arguments are given, only variables of types matching these
869 arguments are returned."""
869 arguments are returned."""
870
870
871 user_ns = self.shell.user_ns
871 user_ns = self.shell.user_ns
872 internal_ns = self.shell.internal_ns
872 internal_ns = self.shell.internal_ns
873 user_config_ns = self.shell.user_config_ns
873 user_config_ns = self.shell.user_config_ns
874 out = []
874 out = []
875 typelist = parameter_s.split()
875 typelist = parameter_s.split()
876
876
877 for i in user_ns:
877 for i in user_ns:
878 if not (i.startswith('_') or i.startswith('_i')) \
878 if not (i.startswith('_') or i.startswith('_i')) \
879 and not (i in internal_ns or i in user_config_ns):
879 and not (i in internal_ns or i in user_config_ns):
880 if typelist:
880 if typelist:
881 if type(user_ns[i]).__name__ in typelist:
881 if type(user_ns[i]).__name__ in typelist:
882 out.append(i)
882 out.append(i)
883 else:
883 else:
884 out.append(i)
884 out.append(i)
885 out.sort()
885 out.sort()
886 return out
886 return out
887
887
888 def magic_who(self, parameter_s=''):
888 def magic_who(self, parameter_s=''):
889 """Print all interactive variables, with some minimal formatting.
889 """Print all interactive variables, with some minimal formatting.
890
890
891 If any arguments are given, only variables whose type matches one of
891 If any arguments are given, only variables whose type matches one of
892 these are printed. For example:
892 these are printed. For example:
893
893
894 %who function str
894 %who function str
895
895
896 will only list functions and strings, excluding all other types of
896 will only list functions and strings, excluding all other types of
897 variables. To find the proper type names, simply use type(var) at a
897 variables. To find the proper type names, simply use type(var) at a
898 command line to see how python prints type names. For example:
898 command line to see how python prints type names. For example:
899
899
900 In [1]: type('hello')\\
900 In [1]: type('hello')\\
901 Out[1]: <type 'str'>
901 Out[1]: <type 'str'>
902
902
903 indicates that the type name for strings is 'str'.
903 indicates that the type name for strings is 'str'.
904
904
905 %who always excludes executed names loaded through your configuration
905 %who always excludes executed names loaded through your configuration
906 file and things which are internal to IPython.
906 file and things which are internal to IPython.
907
907
908 This is deliberate, as typically you may load many modules and the
908 This is deliberate, as typically you may load many modules and the
909 purpose of %who is to show you only what you've manually defined."""
909 purpose of %who is to show you only what you've manually defined."""
910
910
911 varlist = self.magic_who_ls(parameter_s)
911 varlist = self.magic_who_ls(parameter_s)
912 if not varlist:
912 if not varlist:
913 if parameter_s:
913 if parameter_s:
914 print 'No variables match your requested type.'
914 print 'No variables match your requested type.'
915 else:
915 else:
916 print 'Interactive namespace is empty.'
916 print 'Interactive namespace is empty.'
917 return
917 return
918
918
919 # if we have variables, move on...
919 # if we have variables, move on...
920 count = 0
920 count = 0
921 for i in varlist:
921 for i in varlist:
922 print i+'\t',
922 print i+'\t',
923 count += 1
923 count += 1
924 if count > 8:
924 if count > 8:
925 count = 0
925 count = 0
926 print
926 print
927 print
927 print
928
928
929 def magic_whos(self, parameter_s=''):
929 def magic_whos(self, parameter_s=''):
930 """Like %who, but gives some extra information about each variable.
930 """Like %who, but gives some extra information about each variable.
931
931
932 The same type filtering of %who can be applied here.
932 The same type filtering of %who can be applied here.
933
933
934 For all variables, the type is printed. Additionally it prints:
934 For all variables, the type is printed. Additionally it prints:
935
935
936 - For {},[],(): their length.
936 - For {},[],(): their length.
937
937
938 - For numpy and Numeric arrays, a summary with shape, number of
938 - For numpy and Numeric arrays, a summary with shape, number of
939 elements, typecode and size in memory.
939 elements, typecode and size in memory.
940
940
941 - Everything else: a string representation, snipping their middle if
941 - Everything else: a string representation, snipping their middle if
942 too long."""
942 too long."""
943
943
944 varnames = self.magic_who_ls(parameter_s)
944 varnames = self.magic_who_ls(parameter_s)
945 if not varnames:
945 if not varnames:
946 if parameter_s:
946 if parameter_s:
947 print 'No variables match your requested type.'
947 print 'No variables match your requested type.'
948 else:
948 else:
949 print 'Interactive namespace is empty.'
949 print 'Interactive namespace is empty.'
950 return
950 return
951
951
952 # if we have variables, move on...
952 # if we have variables, move on...
953
953
954 # for these types, show len() instead of data:
954 # for these types, show len() instead of data:
955 seq_types = [types.DictType,types.ListType,types.TupleType]
955 seq_types = [types.DictType,types.ListType,types.TupleType]
956
956
957 # for numpy/Numeric arrays, display summary info
957 # for numpy/Numeric arrays, display summary info
958 try:
958 try:
959 import numpy
959 import numpy
960 except ImportError:
960 except ImportError:
961 ndarray_type = None
961 ndarray_type = None
962 else:
962 else:
963 ndarray_type = numpy.ndarray.__name__
963 ndarray_type = numpy.ndarray.__name__
964 try:
964 try:
965 import Numeric
965 import Numeric
966 except ImportError:
966 except ImportError:
967 array_type = None
967 array_type = None
968 else:
968 else:
969 array_type = Numeric.ArrayType.__name__
969 array_type = Numeric.ArrayType.__name__
970
970
971 # Find all variable names and types so we can figure out column sizes
971 # Find all variable names and types so we can figure out column sizes
972 def get_vars(i):
972 def get_vars(i):
973 return self.shell.user_ns[i]
973 return self.shell.user_ns[i]
974
974
975 # some types are well known and can be shorter
975 # some types are well known and can be shorter
976 abbrevs = {'IPython.core.macro.Macro' : 'Macro'}
976 abbrevs = {'IPython.core.macro.Macro' : 'Macro'}
977 def type_name(v):
977 def type_name(v):
978 tn = type(v).__name__
978 tn = type(v).__name__
979 return abbrevs.get(tn,tn)
979 return abbrevs.get(tn,tn)
980
980
981 varlist = map(get_vars,varnames)
981 varlist = map(get_vars,varnames)
982
982
983 typelist = []
983 typelist = []
984 for vv in varlist:
984 for vv in varlist:
985 tt = type_name(vv)
985 tt = type_name(vv)
986
986
987 if tt=='instance':
987 if tt=='instance':
988 typelist.append( abbrevs.get(str(vv.__class__),
988 typelist.append( abbrevs.get(str(vv.__class__),
989 str(vv.__class__)))
989 str(vv.__class__)))
990 else:
990 else:
991 typelist.append(tt)
991 typelist.append(tt)
992
992
993 # column labels and # of spaces as separator
993 # column labels and # of spaces as separator
994 varlabel = 'Variable'
994 varlabel = 'Variable'
995 typelabel = 'Type'
995 typelabel = 'Type'
996 datalabel = 'Data/Info'
996 datalabel = 'Data/Info'
997 colsep = 3
997 colsep = 3
998 # variable format strings
998 # variable format strings
999 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
999 vformat = "$vname.ljust(varwidth)$vtype.ljust(typewidth)"
1000 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
1000 vfmt_short = '$vstr[:25]<...>$vstr[-25:]'
1001 aformat = "%s: %s elems, type `%s`, %s bytes"
1001 aformat = "%s: %s elems, type `%s`, %s bytes"
1002 # find the size of the columns to format the output nicely
1002 # find the size of the columns to format the output nicely
1003 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
1003 varwidth = max(max(map(len,varnames)), len(varlabel)) + colsep
1004 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
1004 typewidth = max(max(map(len,typelist)), len(typelabel)) + colsep
1005 # table header
1005 # table header
1006 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
1006 print varlabel.ljust(varwidth) + typelabel.ljust(typewidth) + \
1007 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
1007 ' '+datalabel+'\n' + '-'*(varwidth+typewidth+len(datalabel)+1)
1008 # and the table itself
1008 # and the table itself
1009 kb = 1024
1009 kb = 1024
1010 Mb = 1048576 # kb**2
1010 Mb = 1048576 # kb**2
1011 for vname,var,vtype in zip(varnames,varlist,typelist):
1011 for vname,var,vtype in zip(varnames,varlist,typelist):
1012 print itpl(vformat),
1012 print itpl(vformat),
1013 if vtype in seq_types:
1013 if vtype in seq_types:
1014 print len(var)
1014 print len(var)
1015 elif vtype in [array_type,ndarray_type]:
1015 elif vtype in [array_type,ndarray_type]:
1016 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
1016 vshape = str(var.shape).replace(',','').replace(' ','x')[1:-1]
1017 if vtype==ndarray_type:
1017 if vtype==ndarray_type:
1018 # numpy
1018 # numpy
1019 vsize = var.size
1019 vsize = var.size
1020 vbytes = vsize*var.itemsize
1020 vbytes = vsize*var.itemsize
1021 vdtype = var.dtype
1021 vdtype = var.dtype
1022 else:
1022 else:
1023 # Numeric
1023 # Numeric
1024 vsize = Numeric.size(var)
1024 vsize = Numeric.size(var)
1025 vbytes = vsize*var.itemsize()
1025 vbytes = vsize*var.itemsize()
1026 vdtype = var.typecode()
1026 vdtype = var.typecode()
1027
1027
1028 if vbytes < 100000:
1028 if vbytes < 100000:
1029 print aformat % (vshape,vsize,vdtype,vbytes)
1029 print aformat % (vshape,vsize,vdtype,vbytes)
1030 else:
1030 else:
1031 print aformat % (vshape,vsize,vdtype,vbytes),
1031 print aformat % (vshape,vsize,vdtype,vbytes),
1032 if vbytes < Mb:
1032 if vbytes < Mb:
1033 print '(%s kb)' % (vbytes/kb,)
1033 print '(%s kb)' % (vbytes/kb,)
1034 else:
1034 else:
1035 print '(%s Mb)' % (vbytes/Mb,)
1035 print '(%s Mb)' % (vbytes/Mb,)
1036 else:
1036 else:
1037 try:
1037 try:
1038 vstr = str(var)
1038 vstr = str(var)
1039 except UnicodeEncodeError:
1039 except UnicodeEncodeError:
1040 vstr = unicode(var).encode(sys.getdefaultencoding(),
1040 vstr = unicode(var).encode(sys.getdefaultencoding(),
1041 'backslashreplace')
1041 'backslashreplace')
1042 vstr = vstr.replace('\n','\\n')
1042 vstr = vstr.replace('\n','\\n')
1043 if len(vstr) < 50:
1043 if len(vstr) < 50:
1044 print vstr
1044 print vstr
1045 else:
1045 else:
1046 printpl(vfmt_short)
1046 printpl(vfmt_short)
1047
1047
1048 def magic_reset(self, parameter_s=''):
1048 def magic_reset(self, parameter_s=''):
1049 """Resets the namespace by removing all names defined by the user.
1049 """Resets the namespace by removing all names defined by the user.
1050
1050
1051 Input/Output history are left around in case you need them.
1051 Input/Output history are left around in case you need them.
1052
1052
1053 Parameters
1053 Parameters
1054 ----------
1054 ----------
1055 -y : force reset without asking for confirmation.
1055 -y : force reset without asking for confirmation.
1056
1056
1057 Examples
1057 Examples
1058 --------
1058 --------
1059 In [6]: a = 1
1059 In [6]: a = 1
1060
1060
1061 In [7]: a
1061 In [7]: a
1062 Out[7]: 1
1062 Out[7]: 1
1063
1063
1064 In [8]: 'a' in _ip.user_ns
1064 In [8]: 'a' in _ip.user_ns
1065 Out[8]: True
1065 Out[8]: True
1066
1066
1067 In [9]: %reset -f
1067 In [9]: %reset -f
1068
1068
1069 In [10]: 'a' in _ip.user_ns
1069 In [10]: 'a' in _ip.user_ns
1070 Out[10]: False
1070 Out[10]: False
1071 """
1071 """
1072
1072
1073 if parameter_s == '-f':
1073 if parameter_s == '-f':
1074 ans = True
1074 ans = True
1075 else:
1075 else:
1076 ans = self.shell.ask_yes_no(
1076 ans = self.shell.ask_yes_no(
1077 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
1077 "Once deleted, variables cannot be recovered. Proceed (y/[n])? ")
1078 if not ans:
1078 if not ans:
1079 print 'Nothing done.'
1079 print 'Nothing done.'
1080 return
1080 return
1081 user_ns = self.shell.user_ns
1081 user_ns = self.shell.user_ns
1082 for i in self.magic_who_ls():
1082 for i in self.magic_who_ls():
1083 del(user_ns[i])
1083 del(user_ns[i])
1084
1084
1085 # Also flush the private list of module references kept for script
1085 # Also flush the private list of module references kept for script
1086 # execution protection
1086 # execution protection
1087 self.shell.clear_main_mod_cache()
1087 self.shell.clear_main_mod_cache()
1088
1088
1089 def magic_logstart(self,parameter_s=''):
1089 def magic_logstart(self,parameter_s=''):
1090 """Start logging anywhere in a session.
1090 """Start logging anywhere in a session.
1091
1091
1092 %logstart [-o|-r|-t] [log_name [log_mode]]
1092 %logstart [-o|-r|-t] [log_name [log_mode]]
1093
1093
1094 If no name is given, it defaults to a file named 'ipython_log.py' in your
1094 If no name is given, it defaults to a file named 'ipython_log.py' in your
1095 current directory, in 'rotate' mode (see below).
1095 current directory, in 'rotate' mode (see below).
1096
1096
1097 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1097 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
1098 history up to that point and then continues logging.
1098 history up to that point and then continues logging.
1099
1099
1100 %logstart takes a second optional parameter: logging mode. This can be one
1100 %logstart takes a second optional parameter: logging mode. This can be one
1101 of (note that the modes are given unquoted):\\
1101 of (note that the modes are given unquoted):\\
1102 append: well, that says it.\\
1102 append: well, that says it.\\
1103 backup: rename (if exists) to name~ and start name.\\
1103 backup: rename (if exists) to name~ and start name.\\
1104 global: single logfile in your home dir, appended to.\\
1104 global: single logfile in your home dir, appended to.\\
1105 over : overwrite existing log.\\
1105 over : overwrite existing log.\\
1106 rotate: create rotating logs name.1~, name.2~, etc.
1106 rotate: create rotating logs name.1~, name.2~, etc.
1107
1107
1108 Options:
1108 Options:
1109
1109
1110 -o: log also IPython's output. In this mode, all commands which
1110 -o: log also IPython's output. In this mode, all commands which
1111 generate an Out[NN] prompt are recorded to the logfile, right after
1111 generate an Out[NN] prompt are recorded to the logfile, right after
1112 their corresponding input line. The output lines are always
1112 their corresponding input line. The output lines are always
1113 prepended with a '#[Out]# ' marker, so that the log remains valid
1113 prepended with a '#[Out]# ' marker, so that the log remains valid
1114 Python code.
1114 Python code.
1115
1115
1116 Since this marker is always the same, filtering only the output from
1116 Since this marker is always the same, filtering only the output from
1117 a log is very easy, using for example a simple awk call:
1117 a log is very easy, using for example a simple awk call:
1118
1118
1119 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1119 awk -F'#\\[Out\\]# ' '{if($2) {print $2}}' ipython_log.py
1120
1120
1121 -r: log 'raw' input. Normally, IPython's logs contain the processed
1121 -r: log 'raw' input. Normally, IPython's logs contain the processed
1122 input, so that user lines are logged in their final form, converted
1122 input, so that user lines are logged in their final form, converted
1123 into valid Python. For example, %Exit is logged as
1123 into valid Python. For example, %Exit is logged as
1124 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1124 '_ip.magic("Exit"). If the -r flag is given, all input is logged
1125 exactly as typed, with no transformations applied.
1125 exactly as typed, with no transformations applied.
1126
1126
1127 -t: put timestamps before each input line logged (these are put in
1127 -t: put timestamps before each input line logged (these are put in
1128 comments)."""
1128 comments)."""
1129
1129
1130 opts,par = self.parse_options(parameter_s,'ort')
1130 opts,par = self.parse_options(parameter_s,'ort')
1131 log_output = 'o' in opts
1131 log_output = 'o' in opts
1132 log_raw_input = 'r' in opts
1132 log_raw_input = 'r' in opts
1133 timestamp = 't' in opts
1133 timestamp = 't' in opts
1134
1134
1135 rc = self.shell.rc
1135 rc = self.shell.rc
1136 logger = self.shell.logger
1136 logger = self.shell.logger
1137
1137
1138 # if no args are given, the defaults set in the logger constructor by
1138 # if no args are given, the defaults set in the logger constructor by
1139 # ipytohn remain valid
1139 # ipytohn remain valid
1140 if par:
1140 if par:
1141 try:
1141 try:
1142 logfname,logmode = par.split()
1142 logfname,logmode = par.split()
1143 except:
1143 except:
1144 logfname = par
1144 logfname = par
1145 logmode = 'backup'
1145 logmode = 'backup'
1146 else:
1146 else:
1147 logfname = logger.logfname
1147 logfname = logger.logfname
1148 logmode = logger.logmode
1148 logmode = logger.logmode
1149 # put logfname into rc struct as if it had been called on the command
1149 # put logfname into rc struct as if it had been called on the command
1150 # line, so it ends up saved in the log header Save it in case we need
1150 # line, so it ends up saved in the log header Save it in case we need
1151 # to restore it...
1151 # to restore it...
1152 old_logfile = rc.opts.get('logfile','')
1152 old_logfile = rc.opts.get('logfile','')
1153 if logfname:
1153 if logfname:
1154 logfname = os.path.expanduser(logfname)
1154 logfname = os.path.expanduser(logfname)
1155 rc.opts.logfile = logfname
1155 rc.opts.logfile = logfname
1156 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1156 loghead = self.shell.loghead_tpl % (rc.opts,rc.args)
1157 try:
1157 try:
1158 started = logger.logstart(logfname,loghead,logmode,
1158 started = logger.logstart(logfname,loghead,logmode,
1159 log_output,timestamp,log_raw_input)
1159 log_output,timestamp,log_raw_input)
1160 except:
1160 except:
1161 rc.opts.logfile = old_logfile
1161 rc.opts.logfile = old_logfile
1162 warn("Couldn't start log: %s" % sys.exc_info()[1])
1162 warn("Couldn't start log: %s" % sys.exc_info()[1])
1163 else:
1163 else:
1164 # log input history up to this point, optionally interleaving
1164 # log input history up to this point, optionally interleaving
1165 # output if requested
1165 # output if requested
1166
1166
1167 if timestamp:
1167 if timestamp:
1168 # disable timestamping for the previous history, since we've
1168 # disable timestamping for the previous history, since we've
1169 # lost those already (no time machine here).
1169 # lost those already (no time machine here).
1170 logger.timestamp = False
1170 logger.timestamp = False
1171
1171
1172 if log_raw_input:
1172 if log_raw_input:
1173 input_hist = self.shell.input_hist_raw
1173 input_hist = self.shell.input_hist_raw
1174 else:
1174 else:
1175 input_hist = self.shell.input_hist
1175 input_hist = self.shell.input_hist
1176
1176
1177 if log_output:
1177 if log_output:
1178 log_write = logger.log_write
1178 log_write = logger.log_write
1179 output_hist = self.shell.output_hist
1179 output_hist = self.shell.output_hist
1180 for n in range(1,len(input_hist)-1):
1180 for n in range(1,len(input_hist)-1):
1181 log_write(input_hist[n].rstrip())
1181 log_write(input_hist[n].rstrip())
1182 if n in output_hist:
1182 if n in output_hist:
1183 log_write(repr(output_hist[n]),'output')
1183 log_write(repr(output_hist[n]),'output')
1184 else:
1184 else:
1185 logger.log_write(input_hist[1:])
1185 logger.log_write(input_hist[1:])
1186 if timestamp:
1186 if timestamp:
1187 # re-enable timestamping
1187 # re-enable timestamping
1188 logger.timestamp = True
1188 logger.timestamp = True
1189
1189
1190 print ('Activating auto-logging. '
1190 print ('Activating auto-logging. '
1191 'Current session state plus future input saved.')
1191 'Current session state plus future input saved.')
1192 logger.logstate()
1192 logger.logstate()
1193
1193
1194 def magic_logstop(self,parameter_s=''):
1194 def magic_logstop(self,parameter_s=''):
1195 """Fully stop logging and close log file.
1195 """Fully stop logging and close log file.
1196
1196
1197 In order to start logging again, a new %logstart call needs to be made,
1197 In order to start logging again, a new %logstart call needs to be made,
1198 possibly (though not necessarily) with a new filename, mode and other
1198 possibly (though not necessarily) with a new filename, mode and other
1199 options."""
1199 options."""
1200 self.logger.logstop()
1200 self.logger.logstop()
1201
1201
1202 def magic_logoff(self,parameter_s=''):
1202 def magic_logoff(self,parameter_s=''):
1203 """Temporarily stop logging.
1203 """Temporarily stop logging.
1204
1204
1205 You must have previously started logging."""
1205 You must have previously started logging."""
1206 self.shell.logger.switch_log(0)
1206 self.shell.logger.switch_log(0)
1207
1207
1208 def magic_logon(self,parameter_s=''):
1208 def magic_logon(self,parameter_s=''):
1209 """Restart logging.
1209 """Restart logging.
1210
1210
1211 This function is for restarting logging which you've temporarily
1211 This function is for restarting logging which you've temporarily
1212 stopped with %logoff. For starting logging for the first time, you
1212 stopped with %logoff. For starting logging for the first time, you
1213 must use the %logstart function, which allows you to specify an
1213 must use the %logstart function, which allows you to specify an
1214 optional log filename."""
1214 optional log filename."""
1215
1215
1216 self.shell.logger.switch_log(1)
1216 self.shell.logger.switch_log(1)
1217
1217
1218 def magic_logstate(self,parameter_s=''):
1218 def magic_logstate(self,parameter_s=''):
1219 """Print the status of the logging system."""
1219 """Print the status of the logging system."""
1220
1220
1221 self.shell.logger.logstate()
1221 self.shell.logger.logstate()
1222
1222
1223 def magic_pdb(self, parameter_s=''):
1223 def magic_pdb(self, parameter_s=''):
1224 """Control the automatic calling of the pdb interactive debugger.
1224 """Control the automatic calling of the pdb interactive debugger.
1225
1225
1226 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1226 Call as '%pdb on', '%pdb 1', '%pdb off' or '%pdb 0'. If called without
1227 argument it works as a toggle.
1227 argument it works as a toggle.
1228
1228
1229 When an exception is triggered, IPython can optionally call the
1229 When an exception is triggered, IPython can optionally call the
1230 interactive pdb debugger after the traceback printout. %pdb toggles
1230 interactive pdb debugger after the traceback printout. %pdb toggles
1231 this feature on and off.
1231 this feature on and off.
1232
1232
1233 The initial state of this feature is set in your ipythonrc
1233 The initial state of this feature is set in your ipythonrc
1234 configuration file (the variable is called 'pdb').
1234 configuration file (the variable is called 'pdb').
1235
1235
1236 If you want to just activate the debugger AFTER an exception has fired,
1236 If you want to just activate the debugger AFTER an exception has fired,
1237 without having to type '%pdb on' and rerunning your code, you can use
1237 without having to type '%pdb on' and rerunning your code, you can use
1238 the %debug magic."""
1238 the %debug magic."""
1239
1239
1240 par = parameter_s.strip().lower()
1240 par = parameter_s.strip().lower()
1241
1241
1242 if par:
1242 if par:
1243 try:
1243 try:
1244 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1244 new_pdb = {'off':0,'0':0,'on':1,'1':1}[par]
1245 except KeyError:
1245 except KeyError:
1246 print ('Incorrect argument. Use on/1, off/0, '
1246 print ('Incorrect argument. Use on/1, off/0, '
1247 'or nothing for a toggle.')
1247 'or nothing for a toggle.')
1248 return
1248 return
1249 else:
1249 else:
1250 # toggle
1250 # toggle
1251 new_pdb = not self.shell.call_pdb
1251 new_pdb = not self.shell.call_pdb
1252
1252
1253 # set on the shell
1253 # set on the shell
1254 self.shell.call_pdb = new_pdb
1254 self.shell.call_pdb = new_pdb
1255 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1255 print 'Automatic pdb calling has been turned',on_off(new_pdb)
1256
1256
1257 def magic_debug(self, parameter_s=''):
1257 def magic_debug(self, parameter_s=''):
1258 """Activate the interactive debugger in post-mortem mode.
1258 """Activate the interactive debugger in post-mortem mode.
1259
1259
1260 If an exception has just occurred, this lets you inspect its stack
1260 If an exception has just occurred, this lets you inspect its stack
1261 frames interactively. Note that this will always work only on the last
1261 frames interactively. Note that this will always work only on the last
1262 traceback that occurred, so you must call this quickly after an
1262 traceback that occurred, so you must call this quickly after an
1263 exception that you wish to inspect has fired, because if another one
1263 exception that you wish to inspect has fired, because if another one
1264 occurs, it clobbers the previous one.
1264 occurs, it clobbers the previous one.
1265
1265
1266 If you want IPython to automatically do this on every exception, see
1266 If you want IPython to automatically do this on every exception, see
1267 the %pdb magic for more details.
1267 the %pdb magic for more details.
1268 """
1268 """
1269
1269
1270 self.shell.debugger(force=True)
1270 self.shell.debugger(force=True)
1271
1271
1272 @testdec.skip_doctest
1272 @testdec.skip_doctest
1273 def magic_prun(self, parameter_s ='',user_mode=1,
1273 def magic_prun(self, parameter_s ='',user_mode=1,
1274 opts=None,arg_lst=None,prog_ns=None):
1274 opts=None,arg_lst=None,prog_ns=None):
1275
1275
1276 """Run a statement through the python code profiler.
1276 """Run a statement through the python code profiler.
1277
1277
1278 Usage:
1278 Usage:
1279 %prun [options] statement
1279 %prun [options] statement
1280
1280
1281 The given statement (which doesn't require quote marks) is run via the
1281 The given statement (which doesn't require quote marks) is run via the
1282 python profiler in a manner similar to the profile.run() function.
1282 python profiler in a manner similar to the profile.run() function.
1283 Namespaces are internally managed to work correctly; profile.run
1283 Namespaces are internally managed to work correctly; profile.run
1284 cannot be used in IPython because it makes certain assumptions about
1284 cannot be used in IPython because it makes certain assumptions about
1285 namespaces which do not hold under IPython.
1285 namespaces which do not hold under IPython.
1286
1286
1287 Options:
1287 Options:
1288
1288
1289 -l <limit>: you can place restrictions on what or how much of the
1289 -l <limit>: you can place restrictions on what or how much of the
1290 profile gets printed. The limit value can be:
1290 profile gets printed. The limit value can be:
1291
1291
1292 * A string: only information for function names containing this string
1292 * A string: only information for function names containing this string
1293 is printed.
1293 is printed.
1294
1294
1295 * An integer: only these many lines are printed.
1295 * An integer: only these many lines are printed.
1296
1296
1297 * A float (between 0 and 1): this fraction of the report is printed
1297 * A float (between 0 and 1): this fraction of the report is printed
1298 (for example, use a limit of 0.4 to see the topmost 40% only).
1298 (for example, use a limit of 0.4 to see the topmost 40% only).
1299
1299
1300 You can combine several limits with repeated use of the option. For
1300 You can combine several limits with repeated use of the option. For
1301 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1301 example, '-l __init__ -l 5' will print only the topmost 5 lines of
1302 information about class constructors.
1302 information about class constructors.
1303
1303
1304 -r: return the pstats.Stats object generated by the profiling. This
1304 -r: return the pstats.Stats object generated by the profiling. This
1305 object has all the information about the profile in it, and you can
1305 object has all the information about the profile in it, and you can
1306 later use it for further analysis or in other functions.
1306 later use it for further analysis or in other functions.
1307
1307
1308 -s <key>: sort profile by given key. You can provide more than one key
1308 -s <key>: sort profile by given key. You can provide more than one key
1309 by using the option several times: '-s key1 -s key2 -s key3...'. The
1309 by using the option several times: '-s key1 -s key2 -s key3...'. The
1310 default sorting key is 'time'.
1310 default sorting key is 'time'.
1311
1311
1312 The following is copied verbatim from the profile documentation
1312 The following is copied verbatim from the profile documentation
1313 referenced below:
1313 referenced below:
1314
1314
1315 When more than one key is provided, additional keys are used as
1315 When more than one key is provided, additional keys are used as
1316 secondary criteria when the there is equality in all keys selected
1316 secondary criteria when the there is equality in all keys selected
1317 before them.
1317 before them.
1318
1318
1319 Abbreviations can be used for any key names, as long as the
1319 Abbreviations can be used for any key names, as long as the
1320 abbreviation is unambiguous. The following are the keys currently
1320 abbreviation is unambiguous. The following are the keys currently
1321 defined:
1321 defined:
1322
1322
1323 Valid Arg Meaning
1323 Valid Arg Meaning
1324 "calls" call count
1324 "calls" call count
1325 "cumulative" cumulative time
1325 "cumulative" cumulative time
1326 "file" file name
1326 "file" file name
1327 "module" file name
1327 "module" file name
1328 "pcalls" primitive call count
1328 "pcalls" primitive call count
1329 "line" line number
1329 "line" line number
1330 "name" function name
1330 "name" function name
1331 "nfl" name/file/line
1331 "nfl" name/file/line
1332 "stdname" standard name
1332 "stdname" standard name
1333 "time" internal time
1333 "time" internal time
1334
1334
1335 Note that all sorts on statistics are in descending order (placing
1335 Note that all sorts on statistics are in descending order (placing
1336 most time consuming items first), where as name, file, and line number
1336 most time consuming items first), where as name, file, and line number
1337 searches are in ascending order (i.e., alphabetical). The subtle
1337 searches are in ascending order (i.e., alphabetical). The subtle
1338 distinction between "nfl" and "stdname" is that the standard name is a
1338 distinction between "nfl" and "stdname" is that the standard name is a
1339 sort of the name as printed, which means that the embedded line
1339 sort of the name as printed, which means that the embedded line
1340 numbers get compared in an odd way. For example, lines 3, 20, and 40
1340 numbers get compared in an odd way. For example, lines 3, 20, and 40
1341 would (if the file names were the same) appear in the string order
1341 would (if the file names were the same) appear in the string order
1342 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1342 "20" "3" and "40". In contrast, "nfl" does a numeric compare of the
1343 line numbers. In fact, sort_stats("nfl") is the same as
1343 line numbers. In fact, sort_stats("nfl") is the same as
1344 sort_stats("name", "file", "line").
1344 sort_stats("name", "file", "line").
1345
1345
1346 -T <filename>: save profile results as shown on screen to a text
1346 -T <filename>: save profile results as shown on screen to a text
1347 file. The profile is still shown on screen.
1347 file. The profile is still shown on screen.
1348
1348
1349 -D <filename>: save (via dump_stats) profile statistics to given
1349 -D <filename>: save (via dump_stats) profile statistics to given
1350 filename. This data is in a format understod by the pstats module, and
1350 filename. This data is in a format understod by the pstats module, and
1351 is generated by a call to the dump_stats() method of profile
1351 is generated by a call to the dump_stats() method of profile
1352 objects. The profile is still shown on screen.
1352 objects. The profile is still shown on screen.
1353
1353
1354 If you want to run complete programs under the profiler's control, use
1354 If you want to run complete programs under the profiler's control, use
1355 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1355 '%run -p [prof_opts] filename.py [args to program]' where prof_opts
1356 contains profiler specific options as described here.
1356 contains profiler specific options as described here.
1357
1357
1358 You can read the complete documentation for the profile module with::
1358 You can read the complete documentation for the profile module with::
1359
1359
1360 In [1]: import profile; profile.help()
1360 In [1]: import profile; profile.help()
1361 """
1361 """
1362
1362
1363 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1363 opts_def = Struct(D=[''],l=[],s=['time'],T=[''])
1364 # protect user quote marks
1364 # protect user quote marks
1365 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1365 parameter_s = parameter_s.replace('"',r'\"').replace("'",r"\'")
1366
1366
1367 if user_mode: # regular user call
1367 if user_mode: # regular user call
1368 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1368 opts,arg_str = self.parse_options(parameter_s,'D:l:rs:T:',
1369 list_all=1)
1369 list_all=1)
1370 namespace = self.shell.user_ns
1370 namespace = self.shell.user_ns
1371 else: # called to run a program by %run -p
1371 else: # called to run a program by %run -p
1372 try:
1372 try:
1373 filename = get_py_filename(arg_lst[0])
1373 filename = get_py_filename(arg_lst[0])
1374 except IOError,msg:
1374 except IOError,msg:
1375 error(msg)
1375 error(msg)
1376 return
1376 return
1377
1377
1378 arg_str = 'execfile(filename,prog_ns)'
1378 arg_str = 'execfile(filename,prog_ns)'
1379 namespace = locals()
1379 namespace = locals()
1380
1380
1381 opts.merge(opts_def)
1381 opts.merge(opts_def)
1382
1382
1383 prof = profile.Profile()
1383 prof = profile.Profile()
1384 try:
1384 try:
1385 prof = prof.runctx(arg_str,namespace,namespace)
1385 prof = prof.runctx(arg_str,namespace,namespace)
1386 sys_exit = ''
1386 sys_exit = ''
1387 except SystemExit:
1387 except SystemExit:
1388 sys_exit = """*** SystemExit exception caught in code being profiled."""
1388 sys_exit = """*** SystemExit exception caught in code being profiled."""
1389
1389
1390 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1390 stats = pstats.Stats(prof).strip_dirs().sort_stats(*opts.s)
1391
1391
1392 lims = opts.l
1392 lims = opts.l
1393 if lims:
1393 if lims:
1394 lims = [] # rebuild lims with ints/floats/strings
1394 lims = [] # rebuild lims with ints/floats/strings
1395 for lim in opts.l:
1395 for lim in opts.l:
1396 try:
1396 try:
1397 lims.append(int(lim))
1397 lims.append(int(lim))
1398 except ValueError:
1398 except ValueError:
1399 try:
1399 try:
1400 lims.append(float(lim))
1400 lims.append(float(lim))
1401 except ValueError:
1401 except ValueError:
1402 lims.append(lim)
1402 lims.append(lim)
1403
1403
1404 # Trap output.
1404 # Trap output.
1405 stdout_trap = StringIO()
1405 stdout_trap = StringIO()
1406
1406
1407 if hasattr(stats,'stream'):
1407 if hasattr(stats,'stream'):
1408 # In newer versions of python, the stats object has a 'stream'
1408 # In newer versions of python, the stats object has a 'stream'
1409 # attribute to write into.
1409 # attribute to write into.
1410 stats.stream = stdout_trap
1410 stats.stream = stdout_trap
1411 stats.print_stats(*lims)
1411 stats.print_stats(*lims)
1412 else:
1412 else:
1413 # For older versions, we manually redirect stdout during printing
1413 # For older versions, we manually redirect stdout during printing
1414 sys_stdout = sys.stdout
1414 sys_stdout = sys.stdout
1415 try:
1415 try:
1416 sys.stdout = stdout_trap
1416 sys.stdout = stdout_trap
1417 stats.print_stats(*lims)
1417 stats.print_stats(*lims)
1418 finally:
1418 finally:
1419 sys.stdout = sys_stdout
1419 sys.stdout = sys_stdout
1420
1420
1421 output = stdout_trap.getvalue()
1421 output = stdout_trap.getvalue()
1422 output = output.rstrip()
1422 output = output.rstrip()
1423
1423
1424 page(output,screen_lines=self.shell.rc.screen_length)
1424 page(output,screen_lines=self.shell.rc.screen_length)
1425 print sys_exit,
1425 print sys_exit,
1426
1426
1427 dump_file = opts.D[0]
1427 dump_file = opts.D[0]
1428 text_file = opts.T[0]
1428 text_file = opts.T[0]
1429 if dump_file:
1429 if dump_file:
1430 prof.dump_stats(dump_file)
1430 prof.dump_stats(dump_file)
1431 print '\n*** Profile stats marshalled to file',\
1431 print '\n*** Profile stats marshalled to file',\
1432 `dump_file`+'.',sys_exit
1432 `dump_file`+'.',sys_exit
1433 if text_file:
1433 if text_file:
1434 pfile = file(text_file,'w')
1434 pfile = file(text_file,'w')
1435 pfile.write(output)
1435 pfile.write(output)
1436 pfile.close()
1436 pfile.close()
1437 print '\n*** Profile printout saved to text file',\
1437 print '\n*** Profile printout saved to text file',\
1438 `text_file`+'.',sys_exit
1438 `text_file`+'.',sys_exit
1439
1439
1440 if opts.has_key('r'):
1440 if opts.has_key('r'):
1441 return stats
1441 return stats
1442 else:
1442 else:
1443 return None
1443 return None
1444
1444
1445 @testdec.skip_doctest
1445 @testdec.skip_doctest
1446 def magic_run(self, parameter_s ='',runner=None,
1446 def magic_run(self, parameter_s ='',runner=None,
1447 file_finder=get_py_filename):
1447 file_finder=get_py_filename):
1448 """Run the named file inside IPython as a program.
1448 """Run the named file inside IPython as a program.
1449
1449
1450 Usage:\\
1450 Usage:\\
1451 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1451 %run [-n -i -t [-N<N>] -d [-b<N>] -p [profile options]] file [args]
1452
1452
1453 Parameters after the filename are passed as command-line arguments to
1453 Parameters after the filename are passed as command-line arguments to
1454 the program (put in sys.argv). Then, control returns to IPython's
1454 the program (put in sys.argv). Then, control returns to IPython's
1455 prompt.
1455 prompt.
1456
1456
1457 This is similar to running at a system prompt:\\
1457 This is similar to running at a system prompt:\\
1458 $ python file args\\
1458 $ python file args\\
1459 but with the advantage of giving you IPython's tracebacks, and of
1459 but with the advantage of giving you IPython's tracebacks, and of
1460 loading all variables into your interactive namespace for further use
1460 loading all variables into your interactive namespace for further use
1461 (unless -p is used, see below).
1461 (unless -p is used, see below).
1462
1462
1463 The file is executed in a namespace initially consisting only of
1463 The file is executed in a namespace initially consisting only of
1464 __name__=='__main__' and sys.argv constructed as indicated. It thus
1464 __name__=='__main__' and sys.argv constructed as indicated. It thus
1465 sees its environment as if it were being run as a stand-alone program
1465 sees its environment as if it were being run as a stand-alone program
1466 (except for sharing global objects such as previously imported
1466 (except for sharing global objects such as previously imported
1467 modules). But after execution, the IPython interactive namespace gets
1467 modules). But after execution, the IPython interactive namespace gets
1468 updated with all variables defined in the program (except for __name__
1468 updated with all variables defined in the program (except for __name__
1469 and sys.argv). This allows for very convenient loading of code for
1469 and sys.argv). This allows for very convenient loading of code for
1470 interactive work, while giving each program a 'clean sheet' to run in.
1470 interactive work, while giving each program a 'clean sheet' to run in.
1471
1471
1472 Options:
1472 Options:
1473
1473
1474 -n: __name__ is NOT set to '__main__', but to the running file's name
1474 -n: __name__ is NOT set to '__main__', but to the running file's name
1475 without extension (as python does under import). This allows running
1475 without extension (as python does under import). This allows running
1476 scripts and reloading the definitions in them without calling code
1476 scripts and reloading the definitions in them without calling code
1477 protected by an ' if __name__ == "__main__" ' clause.
1477 protected by an ' if __name__ == "__main__" ' clause.
1478
1478
1479 -i: run the file in IPython's namespace instead of an empty one. This
1479 -i: run the file in IPython's namespace instead of an empty one. This
1480 is useful if you are experimenting with code written in a text editor
1480 is useful if you are experimenting with code written in a text editor
1481 which depends on variables defined interactively.
1481 which depends on variables defined interactively.
1482
1482
1483 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1483 -e: ignore sys.exit() calls or SystemExit exceptions in the script
1484 being run. This is particularly useful if IPython is being used to
1484 being run. This is particularly useful if IPython is being used to
1485 run unittests, which always exit with a sys.exit() call. In such
1485 run unittests, which always exit with a sys.exit() call. In such
1486 cases you are interested in the output of the test results, not in
1486 cases you are interested in the output of the test results, not in
1487 seeing a traceback of the unittest module.
1487 seeing a traceback of the unittest module.
1488
1488
1489 -t: print timing information at the end of the run. IPython will give
1489 -t: print timing information at the end of the run. IPython will give
1490 you an estimated CPU time consumption for your script, which under
1490 you an estimated CPU time consumption for your script, which under
1491 Unix uses the resource module to avoid the wraparound problems of
1491 Unix uses the resource module to avoid the wraparound problems of
1492 time.clock(). Under Unix, an estimate of time spent on system tasks
1492 time.clock(). Under Unix, an estimate of time spent on system tasks
1493 is also given (for Windows platforms this is reported as 0.0).
1493 is also given (for Windows platforms this is reported as 0.0).
1494
1494
1495 If -t is given, an additional -N<N> option can be given, where <N>
1495 If -t is given, an additional -N<N> option can be given, where <N>
1496 must be an integer indicating how many times you want the script to
1496 must be an integer indicating how many times you want the script to
1497 run. The final timing report will include total and per run results.
1497 run. The final timing report will include total and per run results.
1498
1498
1499 For example (testing the script uniq_stable.py):
1499 For example (testing the script uniq_stable.py):
1500
1500
1501 In [1]: run -t uniq_stable
1501 In [1]: run -t uniq_stable
1502
1502
1503 IPython CPU timings (estimated):\\
1503 IPython CPU timings (estimated):\\
1504 User : 0.19597 s.\\
1504 User : 0.19597 s.\\
1505 System: 0.0 s.\\
1505 System: 0.0 s.\\
1506
1506
1507 In [2]: run -t -N5 uniq_stable
1507 In [2]: run -t -N5 uniq_stable
1508
1508
1509 IPython CPU timings (estimated):\\
1509 IPython CPU timings (estimated):\\
1510 Total runs performed: 5\\
1510 Total runs performed: 5\\
1511 Times : Total Per run\\
1511 Times : Total Per run\\
1512 User : 0.910862 s, 0.1821724 s.\\
1512 User : 0.910862 s, 0.1821724 s.\\
1513 System: 0.0 s, 0.0 s.
1513 System: 0.0 s, 0.0 s.
1514
1514
1515 -d: run your program under the control of pdb, the Python debugger.
1515 -d: run your program under the control of pdb, the Python debugger.
1516 This allows you to execute your program step by step, watch variables,
1516 This allows you to execute your program step by step, watch variables,
1517 etc. Internally, what IPython does is similar to calling:
1517 etc. Internally, what IPython does is similar to calling:
1518
1518
1519 pdb.run('execfile("YOURFILENAME")')
1519 pdb.run('execfile("YOURFILENAME")')
1520
1520
1521 with a breakpoint set on line 1 of your file. You can change the line
1521 with a breakpoint set on line 1 of your file. You can change the line
1522 number for this automatic breakpoint to be <N> by using the -bN option
1522 number for this automatic breakpoint to be <N> by using the -bN option
1523 (where N must be an integer). For example:
1523 (where N must be an integer). For example:
1524
1524
1525 %run -d -b40 myscript
1525 %run -d -b40 myscript
1526
1526
1527 will set the first breakpoint at line 40 in myscript.py. Note that
1527 will set the first breakpoint at line 40 in myscript.py. Note that
1528 the first breakpoint must be set on a line which actually does
1528 the first breakpoint must be set on a line which actually does
1529 something (not a comment or docstring) for it to stop execution.
1529 something (not a comment or docstring) for it to stop execution.
1530
1530
1531 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1531 When the pdb debugger starts, you will see a (Pdb) prompt. You must
1532 first enter 'c' (without qoutes) to start execution up to the first
1532 first enter 'c' (without qoutes) to start execution up to the first
1533 breakpoint.
1533 breakpoint.
1534
1534
1535 Entering 'help' gives information about the use of the debugger. You
1535 Entering 'help' gives information about the use of the debugger. You
1536 can easily see pdb's full documentation with "import pdb;pdb.help()"
1536 can easily see pdb's full documentation with "import pdb;pdb.help()"
1537 at a prompt.
1537 at a prompt.
1538
1538
1539 -p: run program under the control of the Python profiler module (which
1539 -p: run program under the control of the Python profiler module (which
1540 prints a detailed report of execution times, function calls, etc).
1540 prints a detailed report of execution times, function calls, etc).
1541
1541
1542 You can pass other options after -p which affect the behavior of the
1542 You can pass other options after -p which affect the behavior of the
1543 profiler itself. See the docs for %prun for details.
1543 profiler itself. See the docs for %prun for details.
1544
1544
1545 In this mode, the program's variables do NOT propagate back to the
1545 In this mode, the program's variables do NOT propagate back to the
1546 IPython interactive namespace (because they remain in the namespace
1546 IPython interactive namespace (because they remain in the namespace
1547 where the profiler executes them).
1547 where the profiler executes them).
1548
1548
1549 Internally this triggers a call to %prun, see its documentation for
1549 Internally this triggers a call to %prun, see its documentation for
1550 details on the options available specifically for profiling.
1550 details on the options available specifically for profiling.
1551
1551
1552 There is one special usage for which the text above doesn't apply:
1552 There is one special usage for which the text above doesn't apply:
1553 if the filename ends with .ipy, the file is run as ipython script,
1553 if the filename ends with .ipy, the file is run as ipython script,
1554 just as if the commands were written on IPython prompt.
1554 just as if the commands were written on IPython prompt.
1555 """
1555 """
1556
1556
1557 # get arguments and set sys.argv for program to be run.
1557 # get arguments and set sys.argv for program to be run.
1558 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1558 opts,arg_lst = self.parse_options(parameter_s,'nidtN:b:pD:l:rs:T:e',
1559 mode='list',list_all=1)
1559 mode='list',list_all=1)
1560
1560
1561 try:
1561 try:
1562 filename = file_finder(arg_lst[0])
1562 filename = file_finder(arg_lst[0])
1563 except IndexError:
1563 except IndexError:
1564 warn('you must provide at least a filename.')
1564 warn('you must provide at least a filename.')
1565 print '\n%run:\n',oinspect.getdoc(self.magic_run)
1565 print '\n%run:\n',oinspect.getdoc(self.magic_run)
1566 return
1566 return
1567 except IOError,msg:
1567 except IOError,msg:
1568 error(msg)
1568 error(msg)
1569 return
1569 return
1570
1570
1571 if filename.lower().endswith('.ipy'):
1571 if filename.lower().endswith('.ipy'):
1572 self.api.runlines(open(filename).read())
1572 self.api.runlines(open(filename).read())
1573 return
1573 return
1574
1574
1575 # Control the response to exit() calls made by the script being run
1575 # Control the response to exit() calls made by the script being run
1576 exit_ignore = opts.has_key('e')
1576 exit_ignore = opts.has_key('e')
1577
1577
1578 # Make sure that the running script gets a proper sys.argv as if it
1578 # Make sure that the running script gets a proper sys.argv as if it
1579 # were run from a system shell.
1579 # were run from a system shell.
1580 save_argv = sys.argv # save it for later restoring
1580 save_argv = sys.argv # save it for later restoring
1581 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1581 sys.argv = [filename]+ arg_lst[1:] # put in the proper filename
1582
1582
1583 if opts.has_key('i'):
1583 if opts.has_key('i'):
1584 # Run in user's interactive namespace
1584 # Run in user's interactive namespace
1585 prog_ns = self.shell.user_ns
1585 prog_ns = self.shell.user_ns
1586 __name__save = self.shell.user_ns['__name__']
1586 __name__save = self.shell.user_ns['__name__']
1587 prog_ns['__name__'] = '__main__'
1587 prog_ns['__name__'] = '__main__'
1588 main_mod = self.shell.new_main_mod(prog_ns)
1588 main_mod = self.shell.new_main_mod(prog_ns)
1589 else:
1589 else:
1590 # Run in a fresh, empty namespace
1590 # Run in a fresh, empty namespace
1591 if opts.has_key('n'):
1591 if opts.has_key('n'):
1592 name = os.path.splitext(os.path.basename(filename))[0]
1592 name = os.path.splitext(os.path.basename(filename))[0]
1593 else:
1593 else:
1594 name = '__main__'
1594 name = '__main__'
1595
1595
1596 main_mod = self.shell.new_main_mod()
1596 main_mod = self.shell.new_main_mod()
1597 prog_ns = main_mod.__dict__
1597 prog_ns = main_mod.__dict__
1598 prog_ns['__name__'] = name
1598 prog_ns['__name__'] = name
1599
1599
1600 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1600 # Since '%run foo' emulates 'python foo.py' at the cmd line, we must
1601 # set the __file__ global in the script's namespace
1601 # set the __file__ global in the script's namespace
1602 prog_ns['__file__'] = filename
1602 prog_ns['__file__'] = filename
1603
1603
1604 # pickle fix. See iplib for an explanation. But we need to make sure
1604 # pickle fix. See iplib for an explanation. But we need to make sure
1605 # that, if we overwrite __main__, we replace it at the end
1605 # that, if we overwrite __main__, we replace it at the end
1606 main_mod_name = prog_ns['__name__']
1606 main_mod_name = prog_ns['__name__']
1607
1607
1608 if main_mod_name == '__main__':
1608 if main_mod_name == '__main__':
1609 restore_main = sys.modules['__main__']
1609 restore_main = sys.modules['__main__']
1610 else:
1610 else:
1611 restore_main = False
1611 restore_main = False
1612
1612
1613 # This needs to be undone at the end to prevent holding references to
1613 # This needs to be undone at the end to prevent holding references to
1614 # every single object ever created.
1614 # every single object ever created.
1615 sys.modules[main_mod_name] = main_mod
1615 sys.modules[main_mod_name] = main_mod
1616
1616
1617 stats = None
1617 stats = None
1618 try:
1618 try:
1619 self.shell.savehist()
1619 self.shell.savehist()
1620
1620
1621 if opts.has_key('p'):
1621 if opts.has_key('p'):
1622 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1622 stats = self.magic_prun('',0,opts,arg_lst,prog_ns)
1623 else:
1623 else:
1624 if opts.has_key('d'):
1624 if opts.has_key('d'):
1625 deb = debugger.Pdb(self.shell.rc.colors)
1625 deb = debugger.Pdb(self.shell.rc.colors)
1626 # reset Breakpoint state, which is moronically kept
1626 # reset Breakpoint state, which is moronically kept
1627 # in a class
1627 # in a class
1628 bdb.Breakpoint.next = 1
1628 bdb.Breakpoint.next = 1
1629 bdb.Breakpoint.bplist = {}
1629 bdb.Breakpoint.bplist = {}
1630 bdb.Breakpoint.bpbynumber = [None]
1630 bdb.Breakpoint.bpbynumber = [None]
1631 # Set an initial breakpoint to stop execution
1631 # Set an initial breakpoint to stop execution
1632 maxtries = 10
1632 maxtries = 10
1633 bp = int(opts.get('b',[1])[0])
1633 bp = int(opts.get('b',[1])[0])
1634 checkline = deb.checkline(filename,bp)
1634 checkline = deb.checkline(filename,bp)
1635 if not checkline:
1635 if not checkline:
1636 for bp in range(bp+1,bp+maxtries+1):
1636 for bp in range(bp+1,bp+maxtries+1):
1637 if deb.checkline(filename,bp):
1637 if deb.checkline(filename,bp):
1638 break
1638 break
1639 else:
1639 else:
1640 msg = ("\nI failed to find a valid line to set "
1640 msg = ("\nI failed to find a valid line to set "
1641 "a breakpoint\n"
1641 "a breakpoint\n"
1642 "after trying up to line: %s.\n"
1642 "after trying up to line: %s.\n"
1643 "Please set a valid breakpoint manually "
1643 "Please set a valid breakpoint manually "
1644 "with the -b option." % bp)
1644 "with the -b option." % bp)
1645 error(msg)
1645 error(msg)
1646 return
1646 return
1647 # if we find a good linenumber, set the breakpoint
1647 # if we find a good linenumber, set the breakpoint
1648 deb.do_break('%s:%s' % (filename,bp))
1648 deb.do_break('%s:%s' % (filename,bp))
1649 # Start file run
1649 # Start file run
1650 print "NOTE: Enter 'c' at the",
1650 print "NOTE: Enter 'c' at the",
1651 print "%s prompt to start your script." % deb.prompt
1651 print "%s prompt to start your script." % deb.prompt
1652 try:
1652 try:
1653 deb.run('execfile("%s")' % filename,prog_ns)
1653 deb.run('execfile("%s")' % filename,prog_ns)
1654
1654
1655 except:
1655 except:
1656 etype, value, tb = sys.exc_info()
1656 etype, value, tb = sys.exc_info()
1657 # Skip three frames in the traceback: the %run one,
1657 # Skip three frames in the traceback: the %run one,
1658 # one inside bdb.py, and the command-line typed by the
1658 # one inside bdb.py, and the command-line typed by the
1659 # user (run by exec in pdb itself).
1659 # user (run by exec in pdb itself).
1660 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1660 self.shell.InteractiveTB(etype,value,tb,tb_offset=3)
1661 else:
1661 else:
1662 if runner is None:
1662 if runner is None:
1663 runner = self.shell.safe_execfile
1663 runner = self.shell.safe_execfile
1664 if opts.has_key('t'):
1664 if opts.has_key('t'):
1665 # timed execution
1665 # timed execution
1666 try:
1666 try:
1667 nruns = int(opts['N'][0])
1667 nruns = int(opts['N'][0])
1668 if nruns < 1:
1668 if nruns < 1:
1669 error('Number of runs must be >=1')
1669 error('Number of runs must be >=1')
1670 return
1670 return
1671 except (KeyError):
1671 except (KeyError):
1672 nruns = 1
1672 nruns = 1
1673 if nruns == 1:
1673 if nruns == 1:
1674 t0 = clock2()
1674 t0 = clock2()
1675 runner(filename,prog_ns,prog_ns,
1675 runner(filename,prog_ns,prog_ns,
1676 exit_ignore=exit_ignore)
1676 exit_ignore=exit_ignore)
1677 t1 = clock2()
1677 t1 = clock2()
1678 t_usr = t1[0]-t0[0]
1678 t_usr = t1[0]-t0[0]
1679 t_sys = t1[1]-t0[1]
1679 t_sys = t1[1]-t0[1]
1680 print "\nIPython CPU timings (estimated):"
1680 print "\nIPython CPU timings (estimated):"
1681 print " User : %10s s." % t_usr
1681 print " User : %10s s." % t_usr
1682 print " System: %10s s." % t_sys
1682 print " System: %10s s." % t_sys
1683 else:
1683 else:
1684 runs = range(nruns)
1684 runs = range(nruns)
1685 t0 = clock2()
1685 t0 = clock2()
1686 for nr in runs:
1686 for nr in runs:
1687 runner(filename,prog_ns,prog_ns,
1687 runner(filename,prog_ns,prog_ns,
1688 exit_ignore=exit_ignore)
1688 exit_ignore=exit_ignore)
1689 t1 = clock2()
1689 t1 = clock2()
1690 t_usr = t1[0]-t0[0]
1690 t_usr = t1[0]-t0[0]
1691 t_sys = t1[1]-t0[1]
1691 t_sys = t1[1]-t0[1]
1692 print "\nIPython CPU timings (estimated):"
1692 print "\nIPython CPU timings (estimated):"
1693 print "Total runs performed:",nruns
1693 print "Total runs performed:",nruns
1694 print " Times : %10s %10s" % ('Total','Per run')
1694 print " Times : %10s %10s" % ('Total','Per run')
1695 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1695 print " User : %10s s, %10s s." % (t_usr,t_usr/nruns)
1696 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1696 print " System: %10s s, %10s s." % (t_sys,t_sys/nruns)
1697
1697
1698 else:
1698 else:
1699 # regular execution
1699 # regular execution
1700 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1700 runner(filename,prog_ns,prog_ns,exit_ignore=exit_ignore)
1701
1701
1702 if opts.has_key('i'):
1702 if opts.has_key('i'):
1703 self.shell.user_ns['__name__'] = __name__save
1703 self.shell.user_ns['__name__'] = __name__save
1704 else:
1704 else:
1705 # The shell MUST hold a reference to prog_ns so after %run
1705 # The shell MUST hold a reference to prog_ns so after %run
1706 # exits, the python deletion mechanism doesn't zero it out
1706 # exits, the python deletion mechanism doesn't zero it out
1707 # (leaving dangling references).
1707 # (leaving dangling references).
1708 self.shell.cache_main_mod(prog_ns,filename)
1708 self.shell.cache_main_mod(prog_ns,filename)
1709 # update IPython interactive namespace
1709 # update IPython interactive namespace
1710
1710
1711 # Some forms of read errors on the file may mean the
1711 # Some forms of read errors on the file may mean the
1712 # __name__ key was never set; using pop we don't have to
1712 # __name__ key was never set; using pop we don't have to
1713 # worry about a possible KeyError.
1713 # worry about a possible KeyError.
1714 prog_ns.pop('__name__', None)
1714 prog_ns.pop('__name__', None)
1715
1715
1716 self.shell.user_ns.update(prog_ns)
1716 self.shell.user_ns.update(prog_ns)
1717 finally:
1717 finally:
1718 # It's a bit of a mystery why, but __builtins__ can change from
1718 # It's a bit of a mystery why, but __builtins__ can change from
1719 # being a module to becoming a dict missing some key data after
1719 # being a module to becoming a dict missing some key data after
1720 # %run. As best I can see, this is NOT something IPython is doing
1720 # %run. As best I can see, this is NOT something IPython is doing
1721 # at all, and similar problems have been reported before:
1721 # at all, and similar problems have been reported before:
1722 # http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-10/0188.html
1722 # http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-10/0188.html
1723 # Since this seems to be done by the interpreter itself, the best
1723 # Since this seems to be done by the interpreter itself, the best
1724 # we can do is to at least restore __builtins__ for the user on
1724 # we can do is to at least restore __builtins__ for the user on
1725 # exit.
1725 # exit.
1726 self.shell.user_ns['__builtins__'] = __builtin__
1726 self.shell.user_ns['__builtins__'] = __builtin__
1727
1727
1728 # Ensure key global structures are restored
1728 # Ensure key global structures are restored
1729 sys.argv = save_argv
1729 sys.argv = save_argv
1730 if restore_main:
1730 if restore_main:
1731 sys.modules['__main__'] = restore_main
1731 sys.modules['__main__'] = restore_main
1732 else:
1732 else:
1733 # Remove from sys.modules the reference to main_mod we'd
1733 # Remove from sys.modules the reference to main_mod we'd
1734 # added. Otherwise it will trap references to objects
1734 # added. Otherwise it will trap references to objects
1735 # contained therein.
1735 # contained therein.
1736 del sys.modules[main_mod_name]
1736 del sys.modules[main_mod_name]
1737
1737
1738 self.shell.reloadhist()
1738 self.shell.reloadhist()
1739
1739
1740 return stats
1740 return stats
1741
1741
1742 def magic_runlog(self, parameter_s =''):
1742 def magic_runlog(self, parameter_s =''):
1743 """Run files as logs.
1743 """Run files as logs.
1744
1744
1745 Usage:\\
1745 Usage:\\
1746 %runlog file1 file2 ...
1746 %runlog file1 file2 ...
1747
1747
1748 Run the named files (treating them as log files) in sequence inside
1748 Run the named files (treating them as log files) in sequence inside
1749 the interpreter, and return to the prompt. This is much slower than
1749 the interpreter, and return to the prompt. This is much slower than
1750 %run because each line is executed in a try/except block, but it
1750 %run because each line is executed in a try/except block, but it
1751 allows running files with syntax errors in them.
1751 allows running files with syntax errors in them.
1752
1752
1753 Normally IPython will guess when a file is one of its own logfiles, so
1753 Normally IPython will guess when a file is one of its own logfiles, so
1754 you can typically use %run even for logs. This shorthand allows you to
1754 you can typically use %run even for logs. This shorthand allows you to
1755 force any file to be treated as a log file."""
1755 force any file to be treated as a log file."""
1756
1756
1757 for f in parameter_s.split():
1757 for f in parameter_s.split():
1758 self.shell.safe_execfile(f,self.shell.user_ns,
1758 self.shell.safe_execfile(f,self.shell.user_ns,
1759 self.shell.user_ns,islog=1)
1759 self.shell.user_ns,islog=1)
1760
1760
1761 @testdec.skip_doctest
1761 @testdec.skip_doctest
1762 def magic_timeit(self, parameter_s =''):
1762 def magic_timeit(self, parameter_s =''):
1763 """Time execution of a Python statement or expression
1763 """Time execution of a Python statement or expression
1764
1764
1765 Usage:\\
1765 Usage:\\
1766 %timeit [-n<N> -r<R> [-t|-c]] statement
1766 %timeit [-n<N> -r<R> [-t|-c]] statement
1767
1767
1768 Time execution of a Python statement or expression using the timeit
1768 Time execution of a Python statement or expression using the timeit
1769 module.
1769 module.
1770
1770
1771 Options:
1771 Options:
1772 -n<N>: execute the given statement <N> times in a loop. If this value
1772 -n<N>: execute the given statement <N> times in a loop. If this value
1773 is not given, a fitting value is chosen.
1773 is not given, a fitting value is chosen.
1774
1774
1775 -r<R>: repeat the loop iteration <R> times and take the best result.
1775 -r<R>: repeat the loop iteration <R> times and take the best result.
1776 Default: 3
1776 Default: 3
1777
1777
1778 -t: use time.time to measure the time, which is the default on Unix.
1778 -t: use time.time to measure the time, which is the default on Unix.
1779 This function measures wall time.
1779 This function measures wall time.
1780
1780
1781 -c: use time.clock to measure the time, which is the default on
1781 -c: use time.clock to measure the time, which is the default on
1782 Windows and measures wall time. On Unix, resource.getrusage is used
1782 Windows and measures wall time. On Unix, resource.getrusage is used
1783 instead and returns the CPU user time.
1783 instead and returns the CPU user time.
1784
1784
1785 -p<P>: use a precision of <P> digits to display the timing result.
1785 -p<P>: use a precision of <P> digits to display the timing result.
1786 Default: 3
1786 Default: 3
1787
1787
1788
1788
1789 Examples:
1789 Examples:
1790
1790
1791 In [1]: %timeit pass
1791 In [1]: %timeit pass
1792 10000000 loops, best of 3: 53.3 ns per loop
1792 10000000 loops, best of 3: 53.3 ns per loop
1793
1793
1794 In [2]: u = None
1794 In [2]: u = None
1795
1795
1796 In [3]: %timeit u is None
1796 In [3]: %timeit u is None
1797 10000000 loops, best of 3: 184 ns per loop
1797 10000000 loops, best of 3: 184 ns per loop
1798
1798
1799 In [4]: %timeit -r 4 u == None
1799 In [4]: %timeit -r 4 u == None
1800 1000000 loops, best of 4: 242 ns per loop
1800 1000000 loops, best of 4: 242 ns per loop
1801
1801
1802 In [5]: import time
1802 In [5]: import time
1803
1803
1804 In [6]: %timeit -n1 time.sleep(2)
1804 In [6]: %timeit -n1 time.sleep(2)
1805 1 loops, best of 3: 2 s per loop
1805 1 loops, best of 3: 2 s per loop
1806
1806
1807
1807
1808 The times reported by %timeit will be slightly higher than those
1808 The times reported by %timeit will be slightly higher than those
1809 reported by the timeit.py script when variables are accessed. This is
1809 reported by the timeit.py script when variables are accessed. This is
1810 due to the fact that %timeit executes the statement in the namespace
1810 due to the fact that %timeit executes the statement in the namespace
1811 of the shell, compared with timeit.py, which uses a single setup
1811 of the shell, compared with timeit.py, which uses a single setup
1812 statement to import function or create variables. Generally, the bias
1812 statement to import function or create variables. Generally, the bias
1813 does not matter as long as results from timeit.py are not mixed with
1813 does not matter as long as results from timeit.py are not mixed with
1814 those from %timeit."""
1814 those from %timeit."""
1815
1815
1816 import timeit
1816 import timeit
1817 import math
1817 import math
1818
1818
1819 # XXX: Unfortunately the unicode 'micro' symbol can cause problems in
1819 # XXX: Unfortunately the unicode 'micro' symbol can cause problems in
1820 # certain terminals. Until we figure out a robust way of
1820 # certain terminals. Until we figure out a robust way of
1821 # auto-detecting if the terminal can deal with it, use plain 'us' for
1821 # auto-detecting if the terminal can deal with it, use plain 'us' for
1822 # microseconds. I am really NOT happy about disabling the proper
1822 # microseconds. I am really NOT happy about disabling the proper
1823 # 'micro' prefix, but crashing is worse... If anyone knows what the
1823 # 'micro' prefix, but crashing is worse... If anyone knows what the
1824 # right solution for this is, I'm all ears...
1824 # right solution for this is, I'm all ears...
1825 #
1825 #
1826 # Note: using
1826 # Note: using
1827 #
1827 #
1828 # s = u'\xb5'
1828 # s = u'\xb5'
1829 # s.encode(sys.getdefaultencoding())
1829 # s.encode(sys.getdefaultencoding())
1830 #
1830 #
1831 # is not sufficient, as I've seen terminals where that fails but
1831 # is not sufficient, as I've seen terminals where that fails but
1832 # print s
1832 # print s
1833 #
1833 #
1834 # succeeds
1834 # succeeds
1835 #
1835 #
1836 # See bug: https://bugs.launchpad.net/ipython/+bug/348466
1836 # See bug: https://bugs.launchpad.net/ipython/+bug/348466
1837
1837
1838 #units = [u"s", u"ms",u'\xb5',"ns"]
1838 #units = [u"s", u"ms",u'\xb5',"ns"]
1839 units = [u"s", u"ms",u'us',"ns"]
1839 units = [u"s", u"ms",u'us',"ns"]
1840
1840
1841 scaling = [1, 1e3, 1e6, 1e9]
1841 scaling = [1, 1e3, 1e6, 1e9]
1842
1842
1843 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
1843 opts, stmt = self.parse_options(parameter_s,'n:r:tcp:',
1844 posix=False)
1844 posix=False)
1845 if stmt == "":
1845 if stmt == "":
1846 return
1846 return
1847 timefunc = timeit.default_timer
1847 timefunc = timeit.default_timer
1848 number = int(getattr(opts, "n", 0))
1848 number = int(getattr(opts, "n", 0))
1849 repeat = int(getattr(opts, "r", timeit.default_repeat))
1849 repeat = int(getattr(opts, "r", timeit.default_repeat))
1850 precision = int(getattr(opts, "p", 3))
1850 precision = int(getattr(opts, "p", 3))
1851 if hasattr(opts, "t"):
1851 if hasattr(opts, "t"):
1852 timefunc = time.time
1852 timefunc = time.time
1853 if hasattr(opts, "c"):
1853 if hasattr(opts, "c"):
1854 timefunc = clock
1854 timefunc = clock
1855
1855
1856 timer = timeit.Timer(timer=timefunc)
1856 timer = timeit.Timer(timer=timefunc)
1857 # this code has tight coupling to the inner workings of timeit.Timer,
1857 # this code has tight coupling to the inner workings of timeit.Timer,
1858 # but is there a better way to achieve that the code stmt has access
1858 # but is there a better way to achieve that the code stmt has access
1859 # to the shell namespace?
1859 # to the shell namespace?
1860
1860
1861 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
1861 src = timeit.template % {'stmt': timeit.reindent(stmt, 8),
1862 'setup': "pass"}
1862 'setup': "pass"}
1863 # Track compilation time so it can be reported if too long
1863 # Track compilation time so it can be reported if too long
1864 # Minimum time above which compilation time will be reported
1864 # Minimum time above which compilation time will be reported
1865 tc_min = 0.1
1865 tc_min = 0.1
1866
1866
1867 t0 = clock()
1867 t0 = clock()
1868 code = compile(src, "<magic-timeit>", "exec")
1868 code = compile(src, "<magic-timeit>", "exec")
1869 tc = clock()-t0
1869 tc = clock()-t0
1870
1870
1871 ns = {}
1871 ns = {}
1872 exec code in self.shell.user_ns, ns
1872 exec code in self.shell.user_ns, ns
1873 timer.inner = ns["inner"]
1873 timer.inner = ns["inner"]
1874
1874
1875 if number == 0:
1875 if number == 0:
1876 # determine number so that 0.2 <= total time < 2.0
1876 # determine number so that 0.2 <= total time < 2.0
1877 number = 1
1877 number = 1
1878 for i in range(1, 10):
1878 for i in range(1, 10):
1879 if timer.timeit(number) >= 0.2:
1879 if timer.timeit(number) >= 0.2:
1880 break
1880 break
1881 number *= 10
1881 number *= 10
1882
1882
1883 best = min(timer.repeat(repeat, number)) / number
1883 best = min(timer.repeat(repeat, number)) / number
1884
1884
1885 if best > 0.0:
1885 if best > 0.0:
1886 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1886 order = min(-int(math.floor(math.log10(best)) // 3), 3)
1887 else:
1887 else:
1888 order = 3
1888 order = 3
1889 print u"%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1889 print u"%d loops, best of %d: %.*g %s per loop" % (number, repeat,
1890 precision,
1890 precision,
1891 best * scaling[order],
1891 best * scaling[order],
1892 units[order])
1892 units[order])
1893 if tc > tc_min:
1893 if tc > tc_min:
1894 print "Compiler time: %.2f s" % tc
1894 print "Compiler time: %.2f s" % tc
1895
1895
1896 @testdec.skip_doctest
1896 @testdec.skip_doctest
1897 def magic_time(self,parameter_s = ''):
1897 def magic_time(self,parameter_s = ''):
1898 """Time execution of a Python statement or expression.
1898 """Time execution of a Python statement or expression.
1899
1899
1900 The CPU and wall clock times are printed, and the value of the
1900 The CPU and wall clock times are printed, and the value of the
1901 expression (if any) is returned. Note that under Win32, system time
1901 expression (if any) is returned. Note that under Win32, system time
1902 is always reported as 0, since it can not be measured.
1902 is always reported as 0, since it can not be measured.
1903
1903
1904 This function provides very basic timing functionality. In Python
1904 This function provides very basic timing functionality. In Python
1905 2.3, the timeit module offers more control and sophistication, so this
1905 2.3, the timeit module offers more control and sophistication, so this
1906 could be rewritten to use it (patches welcome).
1906 could be rewritten to use it (patches welcome).
1907
1907
1908 Some examples:
1908 Some examples:
1909
1909
1910 In [1]: time 2**128
1910 In [1]: time 2**128
1911 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1911 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1912 Wall time: 0.00
1912 Wall time: 0.00
1913 Out[1]: 340282366920938463463374607431768211456L
1913 Out[1]: 340282366920938463463374607431768211456L
1914
1914
1915 In [2]: n = 1000000
1915 In [2]: n = 1000000
1916
1916
1917 In [3]: time sum(range(n))
1917 In [3]: time sum(range(n))
1918 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1918 CPU times: user 1.20 s, sys: 0.05 s, total: 1.25 s
1919 Wall time: 1.37
1919 Wall time: 1.37
1920 Out[3]: 499999500000L
1920 Out[3]: 499999500000L
1921
1921
1922 In [4]: time print 'hello world'
1922 In [4]: time print 'hello world'
1923 hello world
1923 hello world
1924 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1924 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1925 Wall time: 0.00
1925 Wall time: 0.00
1926
1926
1927 Note that the time needed by Python to compile the given expression
1927 Note that the time needed by Python to compile the given expression
1928 will be reported if it is more than 0.1s. In this example, the
1928 will be reported if it is more than 0.1s. In this example, the
1929 actual exponentiation is done by Python at compilation time, so while
1929 actual exponentiation is done by Python at compilation time, so while
1930 the expression can take a noticeable amount of time to compute, that
1930 the expression can take a noticeable amount of time to compute, that
1931 time is purely due to the compilation:
1931 time is purely due to the compilation:
1932
1932
1933 In [5]: time 3**9999;
1933 In [5]: time 3**9999;
1934 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1934 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1935 Wall time: 0.00 s
1935 Wall time: 0.00 s
1936
1936
1937 In [6]: time 3**999999;
1937 In [6]: time 3**999999;
1938 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1938 CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s
1939 Wall time: 0.00 s
1939 Wall time: 0.00 s
1940 Compiler : 0.78 s
1940 Compiler : 0.78 s
1941 """
1941 """
1942
1942
1943 # fail immediately if the given expression can't be compiled
1943 # fail immediately if the given expression can't be compiled
1944
1944
1945 expr = self.shell.prefilter(parameter_s,False)
1945 expr = self.shell.prefilter(parameter_s,False)
1946
1946
1947 # Minimum time above which compilation time will be reported
1947 # Minimum time above which compilation time will be reported
1948 tc_min = 0.1
1948 tc_min = 0.1
1949
1949
1950 try:
1950 try:
1951 mode = 'eval'
1951 mode = 'eval'
1952 t0 = clock()
1952 t0 = clock()
1953 code = compile(expr,'<timed eval>',mode)
1953 code = compile(expr,'<timed eval>',mode)
1954 tc = clock()-t0
1954 tc = clock()-t0
1955 except SyntaxError:
1955 except SyntaxError:
1956 mode = 'exec'
1956 mode = 'exec'
1957 t0 = clock()
1957 t0 = clock()
1958 code = compile(expr,'<timed exec>',mode)
1958 code = compile(expr,'<timed exec>',mode)
1959 tc = clock()-t0
1959 tc = clock()-t0
1960 # skew measurement as little as possible
1960 # skew measurement as little as possible
1961 glob = self.shell.user_ns
1961 glob = self.shell.user_ns
1962 clk = clock2
1962 clk = clock2
1963 wtime = time.time
1963 wtime = time.time
1964 # time execution
1964 # time execution
1965 wall_st = wtime()
1965 wall_st = wtime()
1966 if mode=='eval':
1966 if mode=='eval':
1967 st = clk()
1967 st = clk()
1968 out = eval(code,glob)
1968 out = eval(code,glob)
1969 end = clk()
1969 end = clk()
1970 else:
1970 else:
1971 st = clk()
1971 st = clk()
1972 exec code in glob
1972 exec code in glob
1973 end = clk()
1973 end = clk()
1974 out = None
1974 out = None
1975 wall_end = wtime()
1975 wall_end = wtime()
1976 # Compute actual times and report
1976 # Compute actual times and report
1977 wall_time = wall_end-wall_st
1977 wall_time = wall_end-wall_st
1978 cpu_user = end[0]-st[0]
1978 cpu_user = end[0]-st[0]
1979 cpu_sys = end[1]-st[1]
1979 cpu_sys = end[1]-st[1]
1980 cpu_tot = cpu_user+cpu_sys
1980 cpu_tot = cpu_user+cpu_sys
1981 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1981 print "CPU times: user %.2f s, sys: %.2f s, total: %.2f s" % \
1982 (cpu_user,cpu_sys,cpu_tot)
1982 (cpu_user,cpu_sys,cpu_tot)
1983 print "Wall time: %.2f s" % wall_time
1983 print "Wall time: %.2f s" % wall_time
1984 if tc > tc_min:
1984 if tc > tc_min:
1985 print "Compiler : %.2f s" % tc
1985 print "Compiler : %.2f s" % tc
1986 return out
1986 return out
1987
1987
1988 @testdec.skip_doctest
1988 @testdec.skip_doctest
1989 def magic_macro(self,parameter_s = ''):
1989 def magic_macro(self,parameter_s = ''):
1990 """Define a set of input lines as a macro for future re-execution.
1990 """Define a set of input lines as a macro for future re-execution.
1991
1991
1992 Usage:\\
1992 Usage:\\
1993 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1993 %macro [options] name n1-n2 n3-n4 ... n5 .. n6 ...
1994
1994
1995 Options:
1995 Options:
1996
1996
1997 -r: use 'raw' input. By default, the 'processed' history is used,
1997 -r: use 'raw' input. By default, the 'processed' history is used,
1998 so that magics are loaded in their transformed version to valid
1998 so that magics are loaded in their transformed version to valid
1999 Python. If this option is given, the raw input as typed as the
1999 Python. If this option is given, the raw input as typed as the
2000 command line is used instead.
2000 command line is used instead.
2001
2001
2002 This will define a global variable called `name` which is a string
2002 This will define a global variable called `name` which is a string
2003 made of joining the slices and lines you specify (n1,n2,... numbers
2003 made of joining the slices and lines you specify (n1,n2,... numbers
2004 above) from your input history into a single string. This variable
2004 above) from your input history into a single string. This variable
2005 acts like an automatic function which re-executes those lines as if
2005 acts like an automatic function which re-executes those lines as if
2006 you had typed them. You just type 'name' at the prompt and the code
2006 you had typed them. You just type 'name' at the prompt and the code
2007 executes.
2007 executes.
2008
2008
2009 The notation for indicating number ranges is: n1-n2 means 'use line
2009 The notation for indicating number ranges is: n1-n2 means 'use line
2010 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
2010 numbers n1,...n2' (the endpoint is included). That is, '5-7' means
2011 using the lines numbered 5,6 and 7.
2011 using the lines numbered 5,6 and 7.
2012
2012
2013 Note: as a 'hidden' feature, you can also use traditional python slice
2013 Note: as a 'hidden' feature, you can also use traditional python slice
2014 notation, where N:M means numbers N through M-1.
2014 notation, where N:M means numbers N through M-1.
2015
2015
2016 For example, if your history contains (%hist prints it):
2016 For example, if your history contains (%hist prints it):
2017
2017
2018 44: x=1
2018 44: x=1
2019 45: y=3
2019 45: y=3
2020 46: z=x+y
2020 46: z=x+y
2021 47: print x
2021 47: print x
2022 48: a=5
2022 48: a=5
2023 49: print 'x',x,'y',y
2023 49: print 'x',x,'y',y
2024
2024
2025 you can create a macro with lines 44 through 47 (included) and line 49
2025 you can create a macro with lines 44 through 47 (included) and line 49
2026 called my_macro with:
2026 called my_macro with:
2027
2027
2028 In [55]: %macro my_macro 44-47 49
2028 In [55]: %macro my_macro 44-47 49
2029
2029
2030 Now, typing `my_macro` (without quotes) will re-execute all this code
2030 Now, typing `my_macro` (without quotes) will re-execute all this code
2031 in one pass.
2031 in one pass.
2032
2032
2033 You don't need to give the line-numbers in order, and any given line
2033 You don't need to give the line-numbers in order, and any given line
2034 number can appear multiple times. You can assemble macros with any
2034 number can appear multiple times. You can assemble macros with any
2035 lines from your input history in any order.
2035 lines from your input history in any order.
2036
2036
2037 The macro is a simple object which holds its value in an attribute,
2037 The macro is a simple object which holds its value in an attribute,
2038 but IPython's display system checks for macros and executes them as
2038 but IPython's display system checks for macros and executes them as
2039 code instead of printing them when you type their name.
2039 code instead of printing them when you type their name.
2040
2040
2041 You can view a macro's contents by explicitly printing it with:
2041 You can view a macro's contents by explicitly printing it with:
2042
2042
2043 'print macro_name'.
2043 'print macro_name'.
2044
2044
2045 For one-off cases which DON'T contain magic function calls in them you
2045 For one-off cases which DON'T contain magic function calls in them you
2046 can obtain similar results by explicitly executing slices from your
2046 can obtain similar results by explicitly executing slices from your
2047 input history with:
2047 input history with:
2048
2048
2049 In [60]: exec In[44:48]+In[49]"""
2049 In [60]: exec In[44:48]+In[49]"""
2050
2050
2051 opts,args = self.parse_options(parameter_s,'r',mode='list')
2051 opts,args = self.parse_options(parameter_s,'r',mode='list')
2052 if not args:
2052 if not args:
2053 macs = [k for k,v in self.shell.user_ns.items() if isinstance(v, Macro)]
2053 macs = [k for k,v in self.shell.user_ns.items() if isinstance(v, Macro)]
2054 macs.sort()
2054 macs.sort()
2055 return macs
2055 return macs
2056 if len(args) == 1:
2056 if len(args) == 1:
2057 raise UsageError(
2057 raise UsageError(
2058 "%macro insufficient args; usage '%macro name n1-n2 n3-4...")
2058 "%macro insufficient args; usage '%macro name n1-n2 n3-4...")
2059 name,ranges = args[0], args[1:]
2059 name,ranges = args[0], args[1:]
2060
2060
2061 #print 'rng',ranges # dbg
2061 #print 'rng',ranges # dbg
2062 lines = self.extract_input_slices(ranges,opts.has_key('r'))
2062 lines = self.extract_input_slices(ranges,opts.has_key('r'))
2063 macro = Macro(lines)
2063 macro = Macro(lines)
2064 self.shell.user_ns.update({name:macro})
2064 self.shell.user_ns.update({name:macro})
2065 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
2065 print 'Macro `%s` created. To execute, type its name (without quotes).' % name
2066 print 'Macro contents:'
2066 print 'Macro contents:'
2067 print macro,
2067 print macro,
2068
2068
2069 def magic_save(self,parameter_s = ''):
2069 def magic_save(self,parameter_s = ''):
2070 """Save a set of lines to a given filename.
2070 """Save a set of lines to a given filename.
2071
2071
2072 Usage:\\
2072 Usage:\\
2073 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
2073 %save [options] filename n1-n2 n3-n4 ... n5 .. n6 ...
2074
2074
2075 Options:
2075 Options:
2076
2076
2077 -r: use 'raw' input. By default, the 'processed' history is used,
2077 -r: use 'raw' input. By default, the 'processed' history is used,
2078 so that magics are loaded in their transformed version to valid
2078 so that magics are loaded in their transformed version to valid
2079 Python. If this option is given, the raw input as typed as the
2079 Python. If this option is given, the raw input as typed as the
2080 command line is used instead.
2080 command line is used instead.
2081
2081
2082 This function uses the same syntax as %macro for line extraction, but
2082 This function uses the same syntax as %macro for line extraction, but
2083 instead of creating a macro it saves the resulting string to the
2083 instead of creating a macro it saves the resulting string to the
2084 filename you specify.
2084 filename you specify.
2085
2085
2086 It adds a '.py' extension to the file if you don't do so yourself, and
2086 It adds a '.py' extension to the file if you don't do so yourself, and
2087 it asks for confirmation before overwriting existing files."""
2087 it asks for confirmation before overwriting existing files."""
2088
2088
2089 opts,args = self.parse_options(parameter_s,'r',mode='list')
2089 opts,args = self.parse_options(parameter_s,'r',mode='list')
2090 fname,ranges = args[0], args[1:]
2090 fname,ranges = args[0], args[1:]
2091 if not fname.endswith('.py'):
2091 if not fname.endswith('.py'):
2092 fname += '.py'
2092 fname += '.py'
2093 if os.path.isfile(fname):
2093 if os.path.isfile(fname):
2094 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
2094 ans = raw_input('File `%s` exists. Overwrite (y/[N])? ' % fname)
2095 if ans.lower() not in ['y','yes']:
2095 if ans.lower() not in ['y','yes']:
2096 print 'Operation cancelled.'
2096 print 'Operation cancelled.'
2097 return
2097 return
2098 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
2098 cmds = ''.join(self.extract_input_slices(ranges,opts.has_key('r')))
2099 f = file(fname,'w')
2099 f = file(fname,'w')
2100 f.write(cmds)
2100 f.write(cmds)
2101 f.close()
2101 f.close()
2102 print 'The following commands were written to file `%s`:' % fname
2102 print 'The following commands were written to file `%s`:' % fname
2103 print cmds
2103 print cmds
2104
2104
2105 def _edit_macro(self,mname,macro):
2105 def _edit_macro(self,mname,macro):
2106 """open an editor with the macro data in a file"""
2106 """open an editor with the macro data in a file"""
2107 filename = self.shell.mktempfile(macro.value)
2107 filename = self.shell.mktempfile(macro.value)
2108 self.shell.hooks.editor(filename)
2108 self.shell.hooks.editor(filename)
2109
2109
2110 # and make a new macro object, to replace the old one
2110 # and make a new macro object, to replace the old one
2111 mfile = open(filename)
2111 mfile = open(filename)
2112 mvalue = mfile.read()
2112 mvalue = mfile.read()
2113 mfile.close()
2113 mfile.close()
2114 self.shell.user_ns[mname] = Macro(mvalue)
2114 self.shell.user_ns[mname] = Macro(mvalue)
2115
2115
2116 def magic_ed(self,parameter_s=''):
2116 def magic_ed(self,parameter_s=''):
2117 """Alias to %edit."""
2117 """Alias to %edit."""
2118 return self.magic_edit(parameter_s)
2118 return self.magic_edit(parameter_s)
2119
2119
2120 @testdec.skip_doctest
2120 @testdec.skip_doctest
2121 def magic_edit(self,parameter_s='',last_call=['','']):
2121 def magic_edit(self,parameter_s='',last_call=['','']):
2122 """Bring up an editor and execute the resulting code.
2122 """Bring up an editor and execute the resulting code.
2123
2123
2124 Usage:
2124 Usage:
2125 %edit [options] [args]
2125 %edit [options] [args]
2126
2126
2127 %edit runs IPython's editor hook. The default version of this hook is
2127 %edit runs IPython's editor hook. The default version of this hook is
2128 set to call the __IPYTHON__.rc.editor command. This is read from your
2128 set to call the __IPYTHON__.rc.editor command. This is read from your
2129 environment variable $EDITOR. If this isn't found, it will default to
2129 environment variable $EDITOR. If this isn't found, it will default to
2130 vi under Linux/Unix and to notepad under Windows. See the end of this
2130 vi under Linux/Unix and to notepad under Windows. See the end of this
2131 docstring for how to change the editor hook.
2131 docstring for how to change the editor hook.
2132
2132
2133 You can also set the value of this editor via the command line option
2133 You can also set the value of this editor via the command line option
2134 '-editor' or in your ipythonrc file. This is useful if you wish to use
2134 '-editor' or in your ipythonrc file. This is useful if you wish to use
2135 specifically for IPython an editor different from your typical default
2135 specifically for IPython an editor different from your typical default
2136 (and for Windows users who typically don't set environment variables).
2136 (and for Windows users who typically don't set environment variables).
2137
2137
2138 This command allows you to conveniently edit multi-line code right in
2138 This command allows you to conveniently edit multi-line code right in
2139 your IPython session.
2139 your IPython session.
2140
2140
2141 If called without arguments, %edit opens up an empty editor with a
2141 If called without arguments, %edit opens up an empty editor with a
2142 temporary file and will execute the contents of this file when you
2142 temporary file and will execute the contents of this file when you
2143 close it (don't forget to save it!).
2143 close it (don't forget to save it!).
2144
2144
2145
2145
2146 Options:
2146 Options:
2147
2147
2148 -n <number>: open the editor at a specified line number. By default,
2148 -n <number>: open the editor at a specified line number. By default,
2149 the IPython editor hook uses the unix syntax 'editor +N filename', but
2149 the IPython editor hook uses the unix syntax 'editor +N filename', but
2150 you can configure this by providing your own modified hook if your
2150 you can configure this by providing your own modified hook if your
2151 favorite editor supports line-number specifications with a different
2151 favorite editor supports line-number specifications with a different
2152 syntax.
2152 syntax.
2153
2153
2154 -p: this will call the editor with the same data as the previous time
2154 -p: this will call the editor with the same data as the previous time
2155 it was used, regardless of how long ago (in your current session) it
2155 it was used, regardless of how long ago (in your current session) it
2156 was.
2156 was.
2157
2157
2158 -r: use 'raw' input. This option only applies to input taken from the
2158 -r: use 'raw' input. This option only applies to input taken from the
2159 user's history. By default, the 'processed' history is used, so that
2159 user's history. By default, the 'processed' history is used, so that
2160 magics are loaded in their transformed version to valid Python. If
2160 magics are loaded in their transformed version to valid Python. If
2161 this option is given, the raw input as typed as the command line is
2161 this option is given, the raw input as typed as the command line is
2162 used instead. When you exit the editor, it will be executed by
2162 used instead. When you exit the editor, it will be executed by
2163 IPython's own processor.
2163 IPython's own processor.
2164
2164
2165 -x: do not execute the edited code immediately upon exit. This is
2165 -x: do not execute the edited code immediately upon exit. This is
2166 mainly useful if you are editing programs which need to be called with
2166 mainly useful if you are editing programs which need to be called with
2167 command line arguments, which you can then do using %run.
2167 command line arguments, which you can then do using %run.
2168
2168
2169
2169
2170 Arguments:
2170 Arguments:
2171
2171
2172 If arguments are given, the following possibilites exist:
2172 If arguments are given, the following possibilites exist:
2173
2173
2174 - The arguments are numbers or pairs of colon-separated numbers (like
2174 - The arguments are numbers or pairs of colon-separated numbers (like
2175 1 4:8 9). These are interpreted as lines of previous input to be
2175 1 4:8 9). These are interpreted as lines of previous input to be
2176 loaded into the editor. The syntax is the same of the %macro command.
2176 loaded into the editor. The syntax is the same of the %macro command.
2177
2177
2178 - If the argument doesn't start with a number, it is evaluated as a
2178 - If the argument doesn't start with a number, it is evaluated as a
2179 variable and its contents loaded into the editor. You can thus edit
2179 variable and its contents loaded into the editor. You can thus edit
2180 any string which contains python code (including the result of
2180 any string which contains python code (including the result of
2181 previous edits).
2181 previous edits).
2182
2182
2183 - If the argument is the name of an object (other than a string),
2183 - If the argument is the name of an object (other than a string),
2184 IPython will try to locate the file where it was defined and open the
2184 IPython will try to locate the file where it was defined and open the
2185 editor at the point where it is defined. You can use `%edit function`
2185 editor at the point where it is defined. You can use `%edit function`
2186 to load an editor exactly at the point where 'function' is defined,
2186 to load an editor exactly at the point where 'function' is defined,
2187 edit it and have the file be executed automatically.
2187 edit it and have the file be executed automatically.
2188
2188
2189 If the object is a macro (see %macro for details), this opens up your
2189 If the object is a macro (see %macro for details), this opens up your
2190 specified editor with a temporary file containing the macro's data.
2190 specified editor with a temporary file containing the macro's data.
2191 Upon exit, the macro is reloaded with the contents of the file.
2191 Upon exit, the macro is reloaded with the contents of the file.
2192
2192
2193 Note: opening at an exact line is only supported under Unix, and some
2193 Note: opening at an exact line is only supported under Unix, and some
2194 editors (like kedit and gedit up to Gnome 2.8) do not understand the
2194 editors (like kedit and gedit up to Gnome 2.8) do not understand the
2195 '+NUMBER' parameter necessary for this feature. Good editors like
2195 '+NUMBER' parameter necessary for this feature. Good editors like
2196 (X)Emacs, vi, jed, pico and joe all do.
2196 (X)Emacs, vi, jed, pico and joe all do.
2197
2197
2198 - If the argument is not found as a variable, IPython will look for a
2198 - If the argument is not found as a variable, IPython will look for a
2199 file with that name (adding .py if necessary) and load it into the
2199 file with that name (adding .py if necessary) and load it into the
2200 editor. It will execute its contents with execfile() when you exit,
2200 editor. It will execute its contents with execfile() when you exit,
2201 loading any code in the file into your interactive namespace.
2201 loading any code in the file into your interactive namespace.
2202
2202
2203 After executing your code, %edit will return as output the code you
2203 After executing your code, %edit will return as output the code you
2204 typed in the editor (except when it was an existing file). This way
2204 typed in the editor (except when it was an existing file). This way
2205 you can reload the code in further invocations of %edit as a variable,
2205 you can reload the code in further invocations of %edit as a variable,
2206 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
2206 via _<NUMBER> or Out[<NUMBER>], where <NUMBER> is the prompt number of
2207 the output.
2207 the output.
2208
2208
2209 Note that %edit is also available through the alias %ed.
2209 Note that %edit is also available through the alias %ed.
2210
2210
2211 This is an example of creating a simple function inside the editor and
2211 This is an example of creating a simple function inside the editor and
2212 then modifying it. First, start up the editor:
2212 then modifying it. First, start up the editor:
2213
2213
2214 In [1]: ed
2214 In [1]: ed
2215 Editing... done. Executing edited code...
2215 Editing... done. Executing edited code...
2216 Out[1]: 'def foo():n print "foo() was defined in an editing session"n'
2216 Out[1]: 'def foo():n print "foo() was defined in an editing session"n'
2217
2217
2218 We can then call the function foo():
2218 We can then call the function foo():
2219
2219
2220 In [2]: foo()
2220 In [2]: foo()
2221 foo() was defined in an editing session
2221 foo() was defined in an editing session
2222
2222
2223 Now we edit foo. IPython automatically loads the editor with the
2223 Now we edit foo. IPython automatically loads the editor with the
2224 (temporary) file where foo() was previously defined:
2224 (temporary) file where foo() was previously defined:
2225
2225
2226 In [3]: ed foo
2226 In [3]: ed foo
2227 Editing... done. Executing edited code...
2227 Editing... done. Executing edited code...
2228
2228
2229 And if we call foo() again we get the modified version:
2229 And if we call foo() again we get the modified version:
2230
2230
2231 In [4]: foo()
2231 In [4]: foo()
2232 foo() has now been changed!
2232 foo() has now been changed!
2233
2233
2234 Here is an example of how to edit a code snippet successive
2234 Here is an example of how to edit a code snippet successive
2235 times. First we call the editor:
2235 times. First we call the editor:
2236
2236
2237 In [5]: ed
2237 In [5]: ed
2238 Editing... done. Executing edited code...
2238 Editing... done. Executing edited code...
2239 hello
2239 hello
2240 Out[5]: "print 'hello'n"
2240 Out[5]: "print 'hello'n"
2241
2241
2242 Now we call it again with the previous output (stored in _):
2242 Now we call it again with the previous output (stored in _):
2243
2243
2244 In [6]: ed _
2244 In [6]: ed _
2245 Editing... done. Executing edited code...
2245 Editing... done. Executing edited code...
2246 hello world
2246 hello world
2247 Out[6]: "print 'hello world'n"
2247 Out[6]: "print 'hello world'n"
2248
2248
2249 Now we call it with the output #8 (stored in _8, also as Out[8]):
2249 Now we call it with the output #8 (stored in _8, also as Out[8]):
2250
2250
2251 In [7]: ed _8
2251 In [7]: ed _8
2252 Editing... done. Executing edited code...
2252 Editing... done. Executing edited code...
2253 hello again
2253 hello again
2254 Out[7]: "print 'hello again'n"
2254 Out[7]: "print 'hello again'n"
2255
2255
2256
2256
2257 Changing the default editor hook:
2257 Changing the default editor hook:
2258
2258
2259 If you wish to write your own editor hook, you can put it in a
2259 If you wish to write your own editor hook, you can put it in a
2260 configuration file which you load at startup time. The default hook
2260 configuration file which you load at startup time. The default hook
2261 is defined in the IPython.core.hooks module, and you can use that as a
2261 is defined in the IPython.core.hooks module, and you can use that as a
2262 starting example for further modifications. That file also has
2262 starting example for further modifications. That file also has
2263 general instructions on how to set a new hook for use once you've
2263 general instructions on how to set a new hook for use once you've
2264 defined it."""
2264 defined it."""
2265
2265
2266 # FIXME: This function has become a convoluted mess. It needs a
2266 # FIXME: This function has become a convoluted mess. It needs a
2267 # ground-up rewrite with clean, simple logic.
2267 # ground-up rewrite with clean, simple logic.
2268
2268
2269 def make_filename(arg):
2269 def make_filename(arg):
2270 "Make a filename from the given args"
2270 "Make a filename from the given args"
2271 try:
2271 try:
2272 filename = get_py_filename(arg)
2272 filename = get_py_filename(arg)
2273 except IOError:
2273 except IOError:
2274 if args.endswith('.py'):
2274 if args.endswith('.py'):
2275 filename = arg
2275 filename = arg
2276 else:
2276 else:
2277 filename = None
2277 filename = None
2278 return filename
2278 return filename
2279
2279
2280 # custom exceptions
2280 # custom exceptions
2281 class DataIsObject(Exception): pass
2281 class DataIsObject(Exception): pass
2282
2282
2283 opts,args = self.parse_options(parameter_s,'prxn:')
2283 opts,args = self.parse_options(parameter_s,'prxn:')
2284 # Set a few locals from the options for convenience:
2284 # Set a few locals from the options for convenience:
2285 opts_p = opts.has_key('p')
2285 opts_p = opts.has_key('p')
2286 opts_r = opts.has_key('r')
2286 opts_r = opts.has_key('r')
2287
2287
2288 # Default line number value
2288 # Default line number value
2289 lineno = opts.get('n',None)
2289 lineno = opts.get('n',None)
2290
2290
2291 if opts_p:
2291 if opts_p:
2292 args = '_%s' % last_call[0]
2292 args = '_%s' % last_call[0]
2293 if not self.shell.user_ns.has_key(args):
2293 if not self.shell.user_ns.has_key(args):
2294 args = last_call[1]
2294 args = last_call[1]
2295
2295
2296 # use last_call to remember the state of the previous call, but don't
2296 # use last_call to remember the state of the previous call, but don't
2297 # let it be clobbered by successive '-p' calls.
2297 # let it be clobbered by successive '-p' calls.
2298 try:
2298 try:
2299 last_call[0] = self.shell.outputcache.prompt_count
2299 last_call[0] = self.shell.outputcache.prompt_count
2300 if not opts_p:
2300 if not opts_p:
2301 last_call[1] = parameter_s
2301 last_call[1] = parameter_s
2302 except:
2302 except:
2303 pass
2303 pass
2304
2304
2305 # by default this is done with temp files, except when the given
2305 # by default this is done with temp files, except when the given
2306 # arg is a filename
2306 # arg is a filename
2307 use_temp = 1
2307 use_temp = 1
2308
2308
2309 if re.match(r'\d',args):
2309 if re.match(r'\d',args):
2310 # Mode where user specifies ranges of lines, like in %macro.
2310 # Mode where user specifies ranges of lines, like in %macro.
2311 # This means that you can't edit files whose names begin with
2311 # This means that you can't edit files whose names begin with
2312 # numbers this way. Tough.
2312 # numbers this way. Tough.
2313 ranges = args.split()
2313 ranges = args.split()
2314 data = ''.join(self.extract_input_slices(ranges,opts_r))
2314 data = ''.join(self.extract_input_slices(ranges,opts_r))
2315 elif args.endswith('.py'):
2315 elif args.endswith('.py'):
2316 filename = make_filename(args)
2316 filename = make_filename(args)
2317 data = ''
2317 data = ''
2318 use_temp = 0
2318 use_temp = 0
2319 elif args:
2319 elif args:
2320 try:
2320 try:
2321 # Load the parameter given as a variable. If not a string,
2321 # Load the parameter given as a variable. If not a string,
2322 # process it as an object instead (below)
2322 # process it as an object instead (below)
2323
2323
2324 #print '*** args',args,'type',type(args) # dbg
2324 #print '*** args',args,'type',type(args) # dbg
2325 data = eval(args,self.shell.user_ns)
2325 data = eval(args,self.shell.user_ns)
2326 if not type(data) in StringTypes:
2326 if not type(data) in StringTypes:
2327 raise DataIsObject
2327 raise DataIsObject
2328
2328
2329 except (NameError,SyntaxError):
2329 except (NameError,SyntaxError):
2330 # given argument is not a variable, try as a filename
2330 # given argument is not a variable, try as a filename
2331 filename = make_filename(args)
2331 filename = make_filename(args)
2332 if filename is None:
2332 if filename is None:
2333 warn("Argument given (%s) can't be found as a variable "
2333 warn("Argument given (%s) can't be found as a variable "
2334 "or as a filename." % args)
2334 "or as a filename." % args)
2335 return
2335 return
2336
2336
2337 data = ''
2337 data = ''
2338 use_temp = 0
2338 use_temp = 0
2339 except DataIsObject:
2339 except DataIsObject:
2340
2340
2341 # macros have a special edit function
2341 # macros have a special edit function
2342 if isinstance(data,Macro):
2342 if isinstance(data,Macro):
2343 self._edit_macro(args,data)
2343 self._edit_macro(args,data)
2344 return
2344 return
2345
2345
2346 # For objects, try to edit the file where they are defined
2346 # For objects, try to edit the file where they are defined
2347 try:
2347 try:
2348 filename = inspect.getabsfile(data)
2348 filename = inspect.getabsfile(data)
2349 if 'fakemodule' in filename.lower() and inspect.isclass(data):
2349 if 'fakemodule' in filename.lower() and inspect.isclass(data):
2350 # class created by %edit? Try to find source
2350 # class created by %edit? Try to find source
2351 # by looking for method definitions instead, the
2351 # by looking for method definitions instead, the
2352 # __module__ in those classes is FakeModule.
2352 # __module__ in those classes is FakeModule.
2353 attrs = [getattr(data, aname) for aname in dir(data)]
2353 attrs = [getattr(data, aname) for aname in dir(data)]
2354 for attr in attrs:
2354 for attr in attrs:
2355 if not inspect.ismethod(attr):
2355 if not inspect.ismethod(attr):
2356 continue
2356 continue
2357 filename = inspect.getabsfile(attr)
2357 filename = inspect.getabsfile(attr)
2358 if filename and 'fakemodule' not in filename.lower():
2358 if filename and 'fakemodule' not in filename.lower():
2359 # change the attribute to be the edit target instead
2359 # change the attribute to be the edit target instead
2360 data = attr
2360 data = attr
2361 break
2361 break
2362
2362
2363 datafile = 1
2363 datafile = 1
2364 except TypeError:
2364 except TypeError:
2365 filename = make_filename(args)
2365 filename = make_filename(args)
2366 datafile = 1
2366 datafile = 1
2367 warn('Could not find file where `%s` is defined.\n'
2367 warn('Could not find file where `%s` is defined.\n'
2368 'Opening a file named `%s`' % (args,filename))
2368 'Opening a file named `%s`' % (args,filename))
2369 # Now, make sure we can actually read the source (if it was in
2369 # Now, make sure we can actually read the source (if it was in
2370 # a temp file it's gone by now).
2370 # a temp file it's gone by now).
2371 if datafile:
2371 if datafile:
2372 try:
2372 try:
2373 if lineno is None:
2373 if lineno is None:
2374 lineno = inspect.getsourcelines(data)[1]
2374 lineno = inspect.getsourcelines(data)[1]
2375 except IOError:
2375 except IOError:
2376 filename = make_filename(args)
2376 filename = make_filename(args)
2377 if filename is None:
2377 if filename is None:
2378 warn('The file `%s` where `%s` was defined cannot '
2378 warn('The file `%s` where `%s` was defined cannot '
2379 'be read.' % (filename,data))
2379 'be read.' % (filename,data))
2380 return
2380 return
2381 use_temp = 0
2381 use_temp = 0
2382 else:
2382 else:
2383 data = ''
2383 data = ''
2384
2384
2385 if use_temp:
2385 if use_temp:
2386 filename = self.shell.mktempfile(data)
2386 filename = self.shell.mktempfile(data)
2387 print 'IPython will make a temporary file named:',filename
2387 print 'IPython will make a temporary file named:',filename
2388
2388
2389 # do actual editing here
2389 # do actual editing here
2390 print 'Editing...',
2390 print 'Editing...',
2391 sys.stdout.flush()
2391 sys.stdout.flush()
2392 try:
2392 try:
2393 self.shell.hooks.editor(filename,lineno)
2393 self.shell.hooks.editor(filename,lineno)
2394 except ipapi.TryNext:
2394 except ipapi.TryNext:
2395 warn('Could not open editor')
2395 warn('Could not open editor')
2396 return
2396 return
2397
2397
2398 # XXX TODO: should this be generalized for all string vars?
2398 # XXX TODO: should this be generalized for all string vars?
2399 # For now, this is special-cased to blocks created by cpaste
2399 # For now, this is special-cased to blocks created by cpaste
2400 if args.strip() == 'pasted_block':
2400 if args.strip() == 'pasted_block':
2401 self.shell.user_ns['pasted_block'] = file_read(filename)
2401 self.shell.user_ns['pasted_block'] = file_read(filename)
2402
2402
2403 if opts.has_key('x'): # -x prevents actual execution
2403 if opts.has_key('x'): # -x prevents actual execution
2404 print
2404 print
2405 else:
2405 else:
2406 print 'done. Executing edited code...'
2406 print 'done. Executing edited code...'
2407 if opts_r:
2407 if opts_r:
2408 self.shell.runlines(file_read(filename))
2408 self.shell.runlines(file_read(filename))
2409 else:
2409 else:
2410 self.shell.safe_execfile(filename,self.shell.user_ns,
2410 self.shell.safe_execfile(filename,self.shell.user_ns,
2411 self.shell.user_ns)
2411 self.shell.user_ns)
2412
2412
2413
2413
2414 if use_temp:
2414 if use_temp:
2415 try:
2415 try:
2416 return open(filename).read()
2416 return open(filename).read()
2417 except IOError,msg:
2417 except IOError,msg:
2418 if msg.filename == filename:
2418 if msg.filename == filename:
2419 warn('File not found. Did you forget to save?')
2419 warn('File not found. Did you forget to save?')
2420 return
2420 return
2421 else:
2421 else:
2422 self.shell.showtraceback()
2422 self.shell.showtraceback()
2423
2423
2424 def magic_xmode(self,parameter_s = ''):
2424 def magic_xmode(self,parameter_s = ''):
2425 """Switch modes for the exception handlers.
2425 """Switch modes for the exception handlers.
2426
2426
2427 Valid modes: Plain, Context and Verbose.
2427 Valid modes: Plain, Context and Verbose.
2428
2428
2429 If called without arguments, acts as a toggle."""
2429 If called without arguments, acts as a toggle."""
2430
2430
2431 def xmode_switch_err(name):
2431 def xmode_switch_err(name):
2432 warn('Error changing %s exception modes.\n%s' %
2432 warn('Error changing %s exception modes.\n%s' %
2433 (name,sys.exc_info()[1]))
2433 (name,sys.exc_info()[1]))
2434
2434
2435 shell = self.shell
2435 shell = self.shell
2436 new_mode = parameter_s.strip().capitalize()
2436 new_mode = parameter_s.strip().capitalize()
2437 try:
2437 try:
2438 shell.InteractiveTB.set_mode(mode=new_mode)
2438 shell.InteractiveTB.set_mode(mode=new_mode)
2439 print 'Exception reporting mode:',shell.InteractiveTB.mode
2439 print 'Exception reporting mode:',shell.InteractiveTB.mode
2440 except:
2440 except:
2441 xmode_switch_err('user')
2441 xmode_switch_err('user')
2442
2442
2443 # threaded shells use a special handler in sys.excepthook
2443 # threaded shells use a special handler in sys.excepthook
2444 if shell.isthreaded:
2444 if shell.isthreaded:
2445 try:
2445 try:
2446 shell.sys_excepthook.set_mode(mode=new_mode)
2446 shell.sys_excepthook.set_mode(mode=new_mode)
2447 except:
2447 except:
2448 xmode_switch_err('threaded')
2448 xmode_switch_err('threaded')
2449
2449
2450 def magic_colors(self,parameter_s = ''):
2450 def magic_colors(self,parameter_s = ''):
2451 """Switch color scheme for prompts, info system and exception handlers.
2451 """Switch color scheme for prompts, info system and exception handlers.
2452
2452
2453 Currently implemented schemes: NoColor, Linux, LightBG.
2453 Currently implemented schemes: NoColor, Linux, LightBG.
2454
2454
2455 Color scheme names are not case-sensitive."""
2455 Color scheme names are not case-sensitive."""
2456
2456
2457 def color_switch_err(name):
2457 def color_switch_err(name):
2458 warn('Error changing %s color schemes.\n%s' %
2458 warn('Error changing %s color schemes.\n%s' %
2459 (name,sys.exc_info()[1]))
2459 (name,sys.exc_info()[1]))
2460
2460
2461
2461
2462 new_scheme = parameter_s.strip()
2462 new_scheme = parameter_s.strip()
2463 if not new_scheme:
2463 if not new_scheme:
2464 raise UsageError(
2464 raise UsageError(
2465 "%colors: you must specify a color scheme. See '%colors?'")
2465 "%colors: you must specify a color scheme. See '%colors?'")
2466 return
2466 return
2467 # local shortcut
2467 # local shortcut
2468 shell = self.shell
2468 shell = self.shell
2469
2469
2470 import IPython.utils.rlineimpl as readline
2470 import IPython.utils.rlineimpl as readline
2471
2471
2472 if not readline.have_readline and sys.platform == "win32":
2472 if not readline.have_readline and sys.platform == "win32":
2473 msg = """\
2473 msg = """\
2474 Proper color support under MS Windows requires the pyreadline library.
2474 Proper color support under MS Windows requires the pyreadline library.
2475 You can find it at:
2475 You can find it at:
2476 http://ipython.scipy.org/moin/PyReadline/Intro
2476 http://ipython.scipy.org/moin/PyReadline/Intro
2477 Gary's readline needs the ctypes module, from:
2477 Gary's readline needs the ctypes module, from:
2478 http://starship.python.net/crew/theller/ctypes
2478 http://starship.python.net/crew/theller/ctypes
2479 (Note that ctypes is already part of Python versions 2.5 and newer).
2479 (Note that ctypes is already part of Python versions 2.5 and newer).
2480
2480
2481 Defaulting color scheme to 'NoColor'"""
2481 Defaulting color scheme to 'NoColor'"""
2482 new_scheme = 'NoColor'
2482 new_scheme = 'NoColor'
2483 warn(msg)
2483 warn(msg)
2484
2484
2485 # readline option is 0
2485 # readline option is 0
2486 if not shell.has_readline:
2486 if not shell.has_readline:
2487 new_scheme = 'NoColor'
2487 new_scheme = 'NoColor'
2488
2488
2489 # Set prompt colors
2489 # Set prompt colors
2490 try:
2490 try:
2491 shell.outputcache.set_colors(new_scheme)
2491 shell.outputcache.set_colors(new_scheme)
2492 except:
2492 except:
2493 color_switch_err('prompt')
2493 color_switch_err('prompt')
2494 else:
2494 else:
2495 shell.rc.colors = \
2495 shell.rc.colors = \
2496 shell.outputcache.color_table.active_scheme_name
2496 shell.outputcache.color_table.active_scheme_name
2497 # Set exception colors
2497 # Set exception colors
2498 try:
2498 try:
2499 shell.InteractiveTB.set_colors(scheme = new_scheme)
2499 shell.InteractiveTB.set_colors(scheme = new_scheme)
2500 shell.SyntaxTB.set_colors(scheme = new_scheme)
2500 shell.SyntaxTB.set_colors(scheme = new_scheme)
2501 except:
2501 except:
2502 color_switch_err('exception')
2502 color_switch_err('exception')
2503
2503
2504 # threaded shells use a verbose traceback in sys.excepthook
2504 # threaded shells use a verbose traceback in sys.excepthook
2505 if shell.isthreaded:
2505 if shell.isthreaded:
2506 try:
2506 try:
2507 shell.sys_excepthook.set_colors(scheme=new_scheme)
2507 shell.sys_excepthook.set_colors(scheme=new_scheme)
2508 except:
2508 except:
2509 color_switch_err('system exception handler')
2509 color_switch_err('system exception handler')
2510
2510
2511 # Set info (for 'object?') colors
2511 # Set info (for 'object?') colors
2512 if shell.rc.color_info:
2512 if shell.rc.color_info:
2513 try:
2513 try:
2514 shell.inspector.set_active_scheme(new_scheme)
2514 shell.inspector.set_active_scheme(new_scheme)
2515 except:
2515 except:
2516 color_switch_err('object inspector')
2516 color_switch_err('object inspector')
2517 else:
2517 else:
2518 shell.inspector.set_active_scheme('NoColor')
2518 shell.inspector.set_active_scheme('NoColor')
2519
2519
2520 def magic_color_info(self,parameter_s = ''):
2520 def magic_color_info(self,parameter_s = ''):
2521 """Toggle color_info.
2521 """Toggle color_info.
2522
2522
2523 The color_info configuration parameter controls whether colors are
2523 The color_info configuration parameter controls whether colors are
2524 used for displaying object details (by things like %psource, %pfile or
2524 used for displaying object details (by things like %psource, %pfile or
2525 the '?' system). This function toggles this value with each call.
2525 the '?' system). This function toggles this value with each call.
2526
2526
2527 Note that unless you have a fairly recent pager (less works better
2527 Note that unless you have a fairly recent pager (less works better
2528 than more) in your system, using colored object information displays
2528 than more) in your system, using colored object information displays
2529 will not work properly. Test it and see."""
2529 will not work properly. Test it and see."""
2530
2530
2531 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2531 self.shell.rc.color_info = 1 - self.shell.rc.color_info
2532 self.magic_colors(self.shell.rc.colors)
2532 self.magic_colors(self.shell.rc.colors)
2533 print 'Object introspection functions have now coloring:',
2533 print 'Object introspection functions have now coloring:',
2534 print ['OFF','ON'][self.shell.rc.color_info]
2534 print ['OFF','ON'][self.shell.rc.color_info]
2535
2535
2536 def magic_Pprint(self, parameter_s=''):
2536 def magic_Pprint(self, parameter_s=''):
2537 """Toggle pretty printing on/off."""
2537 """Toggle pretty printing on/off."""
2538
2538
2539 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2539 self.shell.rc.pprint = 1 - self.shell.rc.pprint
2540 print 'Pretty printing has been turned', \
2540 print 'Pretty printing has been turned', \
2541 ['OFF','ON'][self.shell.rc.pprint]
2541 ['OFF','ON'][self.shell.rc.pprint]
2542
2542
2543 def magic_exit(self, parameter_s=''):
2543 def magic_exit(self, parameter_s=''):
2544 """Exit IPython, confirming if configured to do so.
2544 """Exit IPython, confirming if configured to do so.
2545
2545
2546 You can configure whether IPython asks for confirmation upon exit by
2546 You can configure whether IPython asks for confirmation upon exit by
2547 setting the confirm_exit flag in the ipythonrc file."""
2547 setting the confirm_exit flag in the ipythonrc file."""
2548
2548
2549 self.shell.exit()
2549 self.shell.exit()
2550
2550
2551 def magic_quit(self, parameter_s=''):
2551 def magic_quit(self, parameter_s=''):
2552 """Exit IPython, confirming if configured to do so (like %exit)"""
2552 """Exit IPython, confirming if configured to do so (like %exit)"""
2553
2553
2554 self.shell.exit()
2554 self.shell.exit()
2555
2555
2556 def magic_Exit(self, parameter_s=''):
2556 def magic_Exit(self, parameter_s=''):
2557 """Exit IPython without confirmation."""
2557 """Exit IPython without confirmation."""
2558
2558
2559 self.shell.ask_exit()
2559 self.shell.ask_exit()
2560
2560
2561 #......................................................................
2561 #......................................................................
2562 # Functions to implement unix shell-type things
2562 # Functions to implement unix shell-type things
2563
2563
2564 @testdec.skip_doctest
2564 @testdec.skip_doctest
2565 def magic_alias(self, parameter_s = ''):
2565 def magic_alias(self, parameter_s = ''):
2566 """Define an alias for a system command.
2566 """Define an alias for a system command.
2567
2567
2568 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2568 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
2569
2569
2570 Then, typing 'alias_name params' will execute the system command 'cmd
2570 Then, typing 'alias_name params' will execute the system command 'cmd
2571 params' (from your underlying operating system).
2571 params' (from your underlying operating system).
2572
2572
2573 Aliases have lower precedence than magic functions and Python normal
2573 Aliases have lower precedence than magic functions and Python normal
2574 variables, so if 'foo' is both a Python variable and an alias, the
2574 variables, so if 'foo' is both a Python variable and an alias, the
2575 alias can not be executed until 'del foo' removes the Python variable.
2575 alias can not be executed until 'del foo' removes the Python variable.
2576
2576
2577 You can use the %l specifier in an alias definition to represent the
2577 You can use the %l specifier in an alias definition to represent the
2578 whole line when the alias is called. For example:
2578 whole line when the alias is called. For example:
2579
2579
2580 In [2]: alias all echo "Input in brackets: <%l>"
2580 In [2]: alias all echo "Input in brackets: <%l>"
2581 In [3]: all hello world
2581 In [3]: all hello world
2582 Input in brackets: <hello world>
2582 Input in brackets: <hello world>
2583
2583
2584 You can also define aliases with parameters using %s specifiers (one
2584 You can also define aliases with parameters using %s specifiers (one
2585 per parameter):
2585 per parameter):
2586
2586
2587 In [1]: alias parts echo first %s second %s
2587 In [1]: alias parts echo first %s second %s
2588 In [2]: %parts A B
2588 In [2]: %parts A B
2589 first A second B
2589 first A second B
2590 In [3]: %parts A
2590 In [3]: %parts A
2591 Incorrect number of arguments: 2 expected.
2591 Incorrect number of arguments: 2 expected.
2592 parts is an alias to: 'echo first %s second %s'
2592 parts is an alias to: 'echo first %s second %s'
2593
2593
2594 Note that %l and %s are mutually exclusive. You can only use one or
2594 Note that %l and %s are mutually exclusive. You can only use one or
2595 the other in your aliases.
2595 the other in your aliases.
2596
2596
2597 Aliases expand Python variables just like system calls using ! or !!
2597 Aliases expand Python variables just like system calls using ! or !!
2598 do: all expressions prefixed with '$' get expanded. For details of
2598 do: all expressions prefixed with '$' get expanded. For details of
2599 the semantic rules, see PEP-215:
2599 the semantic rules, see PEP-215:
2600 http://www.python.org/peps/pep-0215.html. This is the library used by
2600 http://www.python.org/peps/pep-0215.html. This is the library used by
2601 IPython for variable expansion. If you want to access a true shell
2601 IPython for variable expansion. If you want to access a true shell
2602 variable, an extra $ is necessary to prevent its expansion by IPython:
2602 variable, an extra $ is necessary to prevent its expansion by IPython:
2603
2603
2604 In [6]: alias show echo
2604 In [6]: alias show echo
2605 In [7]: PATH='A Python string'
2605 In [7]: PATH='A Python string'
2606 In [8]: show $PATH
2606 In [8]: show $PATH
2607 A Python string
2607 A Python string
2608 In [9]: show $$PATH
2608 In [9]: show $$PATH
2609 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2609 /usr/local/lf9560/bin:/usr/local/intel/compiler70/ia32/bin:...
2610
2610
2611 You can use the alias facility to acess all of $PATH. See the %rehash
2611 You can use the alias facility to acess all of $PATH. See the %rehash
2612 and %rehashx functions, which automatically create aliases for the
2612 and %rehashx functions, which automatically create aliases for the
2613 contents of your $PATH.
2613 contents of your $PATH.
2614
2614
2615 If called with no parameters, %alias prints the current alias table."""
2615 If called with no parameters, %alias prints the current alias table."""
2616
2616
2617 par = parameter_s.strip()
2617 par = parameter_s.strip()
2618 if not par:
2618 if not par:
2619 stored = self.db.get('stored_aliases', {} )
2619 stored = self.db.get('stored_aliases', {} )
2620 atab = self.shell.alias_table
2620 atab = self.shell.alias_table
2621 aliases = atab.keys()
2621 aliases = atab.keys()
2622 aliases.sort()
2622 aliases.sort()
2623 res = []
2623 res = []
2624 showlast = []
2624 showlast = []
2625 for alias in aliases:
2625 for alias in aliases:
2626 special = False
2626 special = False
2627 try:
2627 try:
2628 tgt = atab[alias][1]
2628 tgt = atab[alias][1]
2629 except (TypeError, AttributeError):
2629 except (TypeError, AttributeError):
2630 # unsubscriptable? probably a callable
2630 # unsubscriptable? probably a callable
2631 tgt = atab[alias]
2631 tgt = atab[alias]
2632 special = True
2632 special = True
2633 # 'interesting' aliases
2633 # 'interesting' aliases
2634 if (alias in stored or
2634 if (alias in stored or
2635 special or
2635 special or
2636 alias.lower() != os.path.splitext(tgt)[0].lower() or
2636 alias.lower() != os.path.splitext(tgt)[0].lower() or
2637 ' ' in tgt):
2637 ' ' in tgt):
2638 showlast.append((alias, tgt))
2638 showlast.append((alias, tgt))
2639 else:
2639 else:
2640 res.append((alias, tgt ))
2640 res.append((alias, tgt ))
2641
2641
2642 # show most interesting aliases last
2642 # show most interesting aliases last
2643 res.extend(showlast)
2643 res.extend(showlast)
2644 print "Total number of aliases:",len(aliases)
2644 print "Total number of aliases:",len(aliases)
2645 return res
2645 return res
2646 try:
2646 try:
2647 alias,cmd = par.split(None,1)
2647 alias,cmd = par.split(None,1)
2648 except:
2648 except:
2649 print oinspect.getdoc(self.magic_alias)
2649 print oinspect.getdoc(self.magic_alias)
2650 else:
2650 else:
2651 nargs = cmd.count('%s')
2651 nargs = cmd.count('%s')
2652 if nargs>0 and cmd.find('%l')>=0:
2652 if nargs>0 and cmd.find('%l')>=0:
2653 error('The %s and %l specifiers are mutually exclusive '
2653 error('The %s and %l specifiers are mutually exclusive '
2654 'in alias definitions.')
2654 'in alias definitions.')
2655 else: # all looks OK
2655 else: # all looks OK
2656 self.shell.alias_table[alias] = (nargs,cmd)
2656 self.shell.alias_table[alias] = (nargs,cmd)
2657 self.shell.alias_table_validate(verbose=0)
2657 self.shell.alias_table_validate(verbose=0)
2658 # end magic_alias
2658 # end magic_alias
2659
2659
2660 def magic_unalias(self, parameter_s = ''):
2660 def magic_unalias(self, parameter_s = ''):
2661 """Remove an alias"""
2661 """Remove an alias"""
2662
2662
2663 aname = parameter_s.strip()
2663 aname = parameter_s.strip()
2664 if aname in self.shell.alias_table:
2664 if aname in self.shell.alias_table:
2665 del self.shell.alias_table[aname]
2665 del self.shell.alias_table[aname]
2666 stored = self.db.get('stored_aliases', {} )
2666 stored = self.db.get('stored_aliases', {} )
2667 if aname in stored:
2667 if aname in stored:
2668 print "Removing %stored alias",aname
2668 print "Removing %stored alias",aname
2669 del stored[aname]
2669 del stored[aname]
2670 self.db['stored_aliases'] = stored
2670 self.db['stored_aliases'] = stored
2671
2671
2672
2672
2673 def magic_rehashx(self, parameter_s = ''):
2673 def magic_rehashx(self, parameter_s = ''):
2674 """Update the alias table with all executable files in $PATH.
2674 """Update the alias table with all executable files in $PATH.
2675
2675
2676 This version explicitly checks that every entry in $PATH is a file
2676 This version explicitly checks that every entry in $PATH is a file
2677 with execute access (os.X_OK), so it is much slower than %rehash.
2677 with execute access (os.X_OK), so it is much slower than %rehash.
2678
2678
2679 Under Windows, it checks executability as a match agains a
2679 Under Windows, it checks executability as a match agains a
2680 '|'-separated string of extensions, stored in the IPython config
2680 '|'-separated string of extensions, stored in the IPython config
2681 variable win_exec_ext. This defaults to 'exe|com|bat'.
2681 variable win_exec_ext. This defaults to 'exe|com|bat'.
2682
2682
2683 This function also resets the root module cache of module completer,
2683 This function also resets the root module cache of module completer,
2684 used on slow filesystems.
2684 used on slow filesystems.
2685 """
2685 """
2686
2686
2687
2687
2688 ip = self.api
2688 ip = self.api
2689
2689
2690 # for the benefit of module completer in ipy_completers.py
2690 # for the benefit of module completer in ipy_completers.py
2691 del ip.db['rootmodules']
2691 del ip.db['rootmodules']
2692
2692
2693 path = [os.path.abspath(os.path.expanduser(p)) for p in
2693 path = [os.path.abspath(os.path.expanduser(p)) for p in
2694 os.environ.get('PATH','').split(os.pathsep)]
2694 os.environ.get('PATH','').split(os.pathsep)]
2695 path = filter(os.path.isdir,path)
2695 path = filter(os.path.isdir,path)
2696
2696
2697 alias_table = self.shell.alias_table
2697 alias_table = self.shell.alias_table
2698 syscmdlist = []
2698 syscmdlist = []
2699 if os.name == 'posix':
2699 if os.name == 'posix':
2700 isexec = lambda fname:os.path.isfile(fname) and \
2700 isexec = lambda fname:os.path.isfile(fname) and \
2701 os.access(fname,os.X_OK)
2701 os.access(fname,os.X_OK)
2702 else:
2702 else:
2703
2703
2704 try:
2704 try:
2705 winext = os.environ['pathext'].replace(';','|').replace('.','')
2705 winext = os.environ['pathext'].replace(';','|').replace('.','')
2706 except KeyError:
2706 except KeyError:
2707 winext = 'exe|com|bat|py'
2707 winext = 'exe|com|bat|py'
2708 if 'py' not in winext:
2708 if 'py' not in winext:
2709 winext += '|py'
2709 winext += '|py'
2710 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2710 execre = re.compile(r'(.*)\.(%s)$' % winext,re.IGNORECASE)
2711 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2711 isexec = lambda fname:os.path.isfile(fname) and execre.match(fname)
2712 savedir = os.getcwd()
2712 savedir = os.getcwd()
2713 try:
2713 try:
2714 # write the whole loop for posix/Windows so we don't have an if in
2714 # write the whole loop for posix/Windows so we don't have an if in
2715 # the innermost part
2715 # the innermost part
2716 if os.name == 'posix':
2716 if os.name == 'posix':
2717 for pdir in path:
2717 for pdir in path:
2718 os.chdir(pdir)
2718 os.chdir(pdir)
2719 for ff in os.listdir(pdir):
2719 for ff in os.listdir(pdir):
2720 if isexec(ff) and ff not in self.shell.no_alias:
2720 if isexec(ff) and ff not in self.shell.no_alias:
2721 # each entry in the alias table must be (N,name),
2721 # each entry in the alias table must be (N,name),
2722 # where N is the number of positional arguments of the
2722 # where N is the number of positional arguments of the
2723 # alias.
2723 # alias.
2724 # Dots will be removed from alias names, since ipython
2724 # Dots will be removed from alias names, since ipython
2725 # assumes names with dots to be python code
2725 # assumes names with dots to be python code
2726 alias_table[ff.replace('.','')] = (0,ff)
2726 alias_table[ff.replace('.','')] = (0,ff)
2727 syscmdlist.append(ff)
2727 syscmdlist.append(ff)
2728 else:
2728 else:
2729 for pdir in path:
2729 for pdir in path:
2730 os.chdir(pdir)
2730 os.chdir(pdir)
2731 for ff in os.listdir(pdir):
2731 for ff in os.listdir(pdir):
2732 base, ext = os.path.splitext(ff)
2732 base, ext = os.path.splitext(ff)
2733 if isexec(ff) and base.lower() not in self.shell.no_alias:
2733 if isexec(ff) and base.lower() not in self.shell.no_alias:
2734 if ext.lower() == '.exe':
2734 if ext.lower() == '.exe':
2735 ff = base
2735 ff = base
2736 alias_table[base.lower().replace('.','')] = (0,ff)
2736 alias_table[base.lower().replace('.','')] = (0,ff)
2737 syscmdlist.append(ff)
2737 syscmdlist.append(ff)
2738 # Make sure the alias table doesn't contain keywords or builtins
2738 # Make sure the alias table doesn't contain keywords or builtins
2739 self.shell.alias_table_validate()
2739 self.shell.alias_table_validate()
2740 # Call again init_auto_alias() so we get 'rm -i' and other
2740 # Call again init_auto_alias() so we get 'rm -i' and other
2741 # modified aliases since %rehashx will probably clobber them
2741 # modified aliases since %rehashx will probably clobber them
2742
2742
2743 # no, we don't want them. if %rehashx clobbers them, good,
2743 # no, we don't want them. if %rehashx clobbers them, good,
2744 # we'll probably get better versions
2744 # we'll probably get better versions
2745 # self.shell.init_auto_alias()
2745 # self.shell.init_auto_alias()
2746 db = ip.db
2746 db = ip.db
2747 db['syscmdlist'] = syscmdlist
2747 db['syscmdlist'] = syscmdlist
2748 finally:
2748 finally:
2749 os.chdir(savedir)
2749 os.chdir(savedir)
2750
2750
2751 def magic_pwd(self, parameter_s = ''):
2751 def magic_pwd(self, parameter_s = ''):
2752 """Return the current working directory path."""
2752 """Return the current working directory path."""
2753 return os.getcwd()
2753 return os.getcwd()
2754
2754
2755 def magic_cd(self, parameter_s=''):
2755 def magic_cd(self, parameter_s=''):
2756 """Change the current working directory.
2756 """Change the current working directory.
2757
2757
2758 This command automatically maintains an internal list of directories
2758 This command automatically maintains an internal list of directories
2759 you visit during your IPython session, in the variable _dh. The
2759 you visit during your IPython session, in the variable _dh. The
2760 command %dhist shows this history nicely formatted. You can also
2760 command %dhist shows this history nicely formatted. You can also
2761 do 'cd -<tab>' to see directory history conveniently.
2761 do 'cd -<tab>' to see directory history conveniently.
2762
2762
2763 Usage:
2763 Usage:
2764
2764
2765 cd 'dir': changes to directory 'dir'.
2765 cd 'dir': changes to directory 'dir'.
2766
2766
2767 cd -: changes to the last visited directory.
2767 cd -: changes to the last visited directory.
2768
2768
2769 cd -<n>: changes to the n-th directory in the directory history.
2769 cd -<n>: changes to the n-th directory in the directory history.
2770
2770
2771 cd --foo: change to directory that matches 'foo' in history
2771 cd --foo: change to directory that matches 'foo' in history
2772
2772
2773 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2773 cd -b <bookmark_name>: jump to a bookmark set by %bookmark
2774 (note: cd <bookmark_name> is enough if there is no
2774 (note: cd <bookmark_name> is enough if there is no
2775 directory <bookmark_name>, but a bookmark with the name exists.)
2775 directory <bookmark_name>, but a bookmark with the name exists.)
2776 'cd -b <tab>' allows you to tab-complete bookmark names.
2776 'cd -b <tab>' allows you to tab-complete bookmark names.
2777
2777
2778 Options:
2778 Options:
2779
2779
2780 -q: quiet. Do not print the working directory after the cd command is
2780 -q: quiet. Do not print the working directory after the cd command is
2781 executed. By default IPython's cd command does print this directory,
2781 executed. By default IPython's cd command does print this directory,
2782 since the default prompts do not display path information.
2782 since the default prompts do not display path information.
2783
2783
2784 Note that !cd doesn't work for this purpose because the shell where
2784 Note that !cd doesn't work for this purpose because the shell where
2785 !command runs is immediately discarded after executing 'command'."""
2785 !command runs is immediately discarded after executing 'command'."""
2786
2786
2787 parameter_s = parameter_s.strip()
2787 parameter_s = parameter_s.strip()
2788 #bkms = self.shell.persist.get("bookmarks",{})
2788 #bkms = self.shell.persist.get("bookmarks",{})
2789
2789
2790 oldcwd = os.getcwd()
2790 oldcwd = os.getcwd()
2791 numcd = re.match(r'(-)(\d+)$',parameter_s)
2791 numcd = re.match(r'(-)(\d+)$',parameter_s)
2792 # jump in directory history by number
2792 # jump in directory history by number
2793 if numcd:
2793 if numcd:
2794 nn = int(numcd.group(2))
2794 nn = int(numcd.group(2))
2795 try:
2795 try:
2796 ps = self.shell.user_ns['_dh'][nn]
2796 ps = self.shell.user_ns['_dh'][nn]
2797 except IndexError:
2797 except IndexError:
2798 print 'The requested directory does not exist in history.'
2798 print 'The requested directory does not exist in history.'
2799 return
2799 return
2800 else:
2800 else:
2801 opts = {}
2801 opts = {}
2802 elif parameter_s.startswith('--'):
2802 elif parameter_s.startswith('--'):
2803 ps = None
2803 ps = None
2804 fallback = None
2804 fallback = None
2805 pat = parameter_s[2:]
2805 pat = parameter_s[2:]
2806 dh = self.shell.user_ns['_dh']
2806 dh = self.shell.user_ns['_dh']
2807 # first search only by basename (last component)
2807 # first search only by basename (last component)
2808 for ent in reversed(dh):
2808 for ent in reversed(dh):
2809 if pat in os.path.basename(ent) and os.path.isdir(ent):
2809 if pat in os.path.basename(ent) and os.path.isdir(ent):
2810 ps = ent
2810 ps = ent
2811 break
2811 break
2812
2812
2813 if fallback is None and pat in ent and os.path.isdir(ent):
2813 if fallback is None and pat in ent and os.path.isdir(ent):
2814 fallback = ent
2814 fallback = ent
2815
2815
2816 # if we have no last part match, pick the first full path match
2816 # if we have no last part match, pick the first full path match
2817 if ps is None:
2817 if ps is None:
2818 ps = fallback
2818 ps = fallback
2819
2819
2820 if ps is None:
2820 if ps is None:
2821 print "No matching entry in directory history"
2821 print "No matching entry in directory history"
2822 return
2822 return
2823 else:
2823 else:
2824 opts = {}
2824 opts = {}
2825
2825
2826
2826
2827 else:
2827 else:
2828 #turn all non-space-escaping backslashes to slashes,
2828 #turn all non-space-escaping backslashes to slashes,
2829 # for c:\windows\directory\names\
2829 # for c:\windows\directory\names\
2830 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2830 parameter_s = re.sub(r'\\(?! )','/', parameter_s)
2831 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2831 opts,ps = self.parse_options(parameter_s,'qb',mode='string')
2832 # jump to previous
2832 # jump to previous
2833 if ps == '-':
2833 if ps == '-':
2834 try:
2834 try:
2835 ps = self.shell.user_ns['_dh'][-2]
2835 ps = self.shell.user_ns['_dh'][-2]
2836 except IndexError:
2836 except IndexError:
2837 raise UsageError('%cd -: No previous directory to change to.')
2837 raise UsageError('%cd -: No previous directory to change to.')
2838 # jump to bookmark if needed
2838 # jump to bookmark if needed
2839 else:
2839 else:
2840 if not os.path.isdir(ps) or opts.has_key('b'):
2840 if not os.path.isdir(ps) or opts.has_key('b'):
2841 bkms = self.db.get('bookmarks', {})
2841 bkms = self.db.get('bookmarks', {})
2842
2842
2843 if bkms.has_key(ps):
2843 if bkms.has_key(ps):
2844 target = bkms[ps]
2844 target = bkms[ps]
2845 print '(bookmark:%s) -> %s' % (ps,target)
2845 print '(bookmark:%s) -> %s' % (ps,target)
2846 ps = target
2846 ps = target
2847 else:
2847 else:
2848 if opts.has_key('b'):
2848 if opts.has_key('b'):
2849 raise UsageError("Bookmark '%s' not found. "
2849 raise UsageError("Bookmark '%s' not found. "
2850 "Use '%%bookmark -l' to see your bookmarks." % ps)
2850 "Use '%%bookmark -l' to see your bookmarks." % ps)
2851
2851
2852 # at this point ps should point to the target dir
2852 # at this point ps should point to the target dir
2853 if ps:
2853 if ps:
2854 try:
2854 try:
2855 os.chdir(os.path.expanduser(ps))
2855 os.chdir(os.path.expanduser(ps))
2856 if self.shell.rc.term_title:
2856 if self.shell.rc.term_title:
2857 #print 'set term title:',self.shell.rc.term_title # dbg
2857 #print 'set term title:',self.shell.rc.term_title # dbg
2858 platutils.set_term_title('IPy ' + abbrev_cwd())
2858 platutils.set_term_title('IPy ' + abbrev_cwd())
2859 except OSError:
2859 except OSError:
2860 print sys.exc_info()[1]
2860 print sys.exc_info()[1]
2861 else:
2861 else:
2862 cwd = os.getcwd()
2862 cwd = os.getcwd()
2863 dhist = self.shell.user_ns['_dh']
2863 dhist = self.shell.user_ns['_dh']
2864 if oldcwd != cwd:
2864 if oldcwd != cwd:
2865 dhist.append(cwd)
2865 dhist.append(cwd)
2866 self.db['dhist'] = compress_dhist(dhist)[-100:]
2866 self.db['dhist'] = compress_dhist(dhist)[-100:]
2867
2867
2868 else:
2868 else:
2869 os.chdir(self.shell.home_dir)
2869 os.chdir(self.shell.home_dir)
2870 if self.shell.rc.term_title:
2870 if self.shell.rc.term_title:
2871 platutils.set_term_title("IPy ~")
2871 platutils.set_term_title("IPy ~")
2872 cwd = os.getcwd()
2872 cwd = os.getcwd()
2873 dhist = self.shell.user_ns['_dh']
2873 dhist = self.shell.user_ns['_dh']
2874
2874
2875 if oldcwd != cwd:
2875 if oldcwd != cwd:
2876 dhist.append(cwd)
2876 dhist.append(cwd)
2877 self.db['dhist'] = compress_dhist(dhist)[-100:]
2877 self.db['dhist'] = compress_dhist(dhist)[-100:]
2878 if not 'q' in opts and self.shell.user_ns['_dh']:
2878 if not 'q' in opts and self.shell.user_ns['_dh']:
2879 print self.shell.user_ns['_dh'][-1]
2879 print self.shell.user_ns['_dh'][-1]
2880
2880
2881
2881
2882 def magic_env(self, parameter_s=''):
2882 def magic_env(self, parameter_s=''):
2883 """List environment variables."""
2883 """List environment variables."""
2884
2884
2885 return os.environ.data
2885 return os.environ.data
2886
2886
2887 def magic_pushd(self, parameter_s=''):
2887 def magic_pushd(self, parameter_s=''):
2888 """Place the current dir on stack and change directory.
2888 """Place the current dir on stack and change directory.
2889
2889
2890 Usage:\\
2890 Usage:\\
2891 %pushd ['dirname']
2891 %pushd ['dirname']
2892 """
2892 """
2893
2893
2894 dir_s = self.shell.dir_stack
2894 dir_s = self.shell.dir_stack
2895 tgt = os.path.expanduser(parameter_s)
2895 tgt = os.path.expanduser(parameter_s)
2896 cwd = os.getcwd().replace(self.home_dir,'~')
2896 cwd = os.getcwd().replace(self.home_dir,'~')
2897 if tgt:
2897 if tgt:
2898 self.magic_cd(parameter_s)
2898 self.magic_cd(parameter_s)
2899 dir_s.insert(0,cwd)
2899 dir_s.insert(0,cwd)
2900 return self.magic_dirs()
2900 return self.magic_dirs()
2901
2901
2902 def magic_popd(self, parameter_s=''):
2902 def magic_popd(self, parameter_s=''):
2903 """Change to directory popped off the top of the stack.
2903 """Change to directory popped off the top of the stack.
2904 """
2904 """
2905 if not self.shell.dir_stack:
2905 if not self.shell.dir_stack:
2906 raise UsageError("%popd on empty stack")
2906 raise UsageError("%popd on empty stack")
2907 top = self.shell.dir_stack.pop(0)
2907 top = self.shell.dir_stack.pop(0)
2908 self.magic_cd(top)
2908 self.magic_cd(top)
2909 print "popd ->",top
2909 print "popd ->",top
2910
2910
2911 def magic_dirs(self, parameter_s=''):
2911 def magic_dirs(self, parameter_s=''):
2912 """Return the current directory stack."""
2912 """Return the current directory stack."""
2913
2913
2914 return self.shell.dir_stack
2914 return self.shell.dir_stack
2915
2915
2916 def magic_dhist(self, parameter_s=''):
2916 def magic_dhist(self, parameter_s=''):
2917 """Print your history of visited directories.
2917 """Print your history of visited directories.
2918
2918
2919 %dhist -> print full history\\
2919 %dhist -> print full history\\
2920 %dhist n -> print last n entries only\\
2920 %dhist n -> print last n entries only\\
2921 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2921 %dhist n1 n2 -> print entries between n1 and n2 (n1 not included)\\
2922
2922
2923 This history is automatically maintained by the %cd command, and
2923 This history is automatically maintained by the %cd command, and
2924 always available as the global list variable _dh. You can use %cd -<n>
2924 always available as the global list variable _dh. You can use %cd -<n>
2925 to go to directory number <n>.
2925 to go to directory number <n>.
2926
2926
2927 Note that most of time, you should view directory history by entering
2927 Note that most of time, you should view directory history by entering
2928 cd -<TAB>.
2928 cd -<TAB>.
2929
2929
2930 """
2930 """
2931
2931
2932 dh = self.shell.user_ns['_dh']
2932 dh = self.shell.user_ns['_dh']
2933 if parameter_s:
2933 if parameter_s:
2934 try:
2934 try:
2935 args = map(int,parameter_s.split())
2935 args = map(int,parameter_s.split())
2936 except:
2936 except:
2937 self.arg_err(Magic.magic_dhist)
2937 self.arg_err(Magic.magic_dhist)
2938 return
2938 return
2939 if len(args) == 1:
2939 if len(args) == 1:
2940 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2940 ini,fin = max(len(dh)-(args[0]),0),len(dh)
2941 elif len(args) == 2:
2941 elif len(args) == 2:
2942 ini,fin = args
2942 ini,fin = args
2943 else:
2943 else:
2944 self.arg_err(Magic.magic_dhist)
2944 self.arg_err(Magic.magic_dhist)
2945 return
2945 return
2946 else:
2946 else:
2947 ini,fin = 0,len(dh)
2947 ini,fin = 0,len(dh)
2948 nlprint(dh,
2948 nlprint(dh,
2949 header = 'Directory history (kept in _dh)',
2949 header = 'Directory history (kept in _dh)',
2950 start=ini,stop=fin)
2950 start=ini,stop=fin)
2951
2951
2952 @testdec.skip_doctest
2952 @testdec.skip_doctest
2953 def magic_sc(self, parameter_s=''):
2953 def magic_sc(self, parameter_s=''):
2954 """Shell capture - execute a shell command and capture its output.
2954 """Shell capture - execute a shell command and capture its output.
2955
2955
2956 DEPRECATED. Suboptimal, retained for backwards compatibility.
2956 DEPRECATED. Suboptimal, retained for backwards compatibility.
2957
2957
2958 You should use the form 'var = !command' instead. Example:
2958 You should use the form 'var = !command' instead. Example:
2959
2959
2960 "%sc -l myfiles = ls ~" should now be written as
2960 "%sc -l myfiles = ls ~" should now be written as
2961
2961
2962 "myfiles = !ls ~"
2962 "myfiles = !ls ~"
2963
2963
2964 myfiles.s, myfiles.l and myfiles.n still apply as documented
2964 myfiles.s, myfiles.l and myfiles.n still apply as documented
2965 below.
2965 below.
2966
2966
2967 --
2967 --
2968 %sc [options] varname=command
2968 %sc [options] varname=command
2969
2969
2970 IPython will run the given command using commands.getoutput(), and
2970 IPython will run the given command using commands.getoutput(), and
2971 will then update the user's interactive namespace with a variable
2971 will then update the user's interactive namespace with a variable
2972 called varname, containing the value of the call. Your command can
2972 called varname, containing the value of the call. Your command can
2973 contain shell wildcards, pipes, etc.
2973 contain shell wildcards, pipes, etc.
2974
2974
2975 The '=' sign in the syntax is mandatory, and the variable name you
2975 The '=' sign in the syntax is mandatory, and the variable name you
2976 supply must follow Python's standard conventions for valid names.
2976 supply must follow Python's standard conventions for valid names.
2977
2977
2978 (A special format without variable name exists for internal use)
2978 (A special format without variable name exists for internal use)
2979
2979
2980 Options:
2980 Options:
2981
2981
2982 -l: list output. Split the output on newlines into a list before
2982 -l: list output. Split the output on newlines into a list before
2983 assigning it to the given variable. By default the output is stored
2983 assigning it to the given variable. By default the output is stored
2984 as a single string.
2984 as a single string.
2985
2985
2986 -v: verbose. Print the contents of the variable.
2986 -v: verbose. Print the contents of the variable.
2987
2987
2988 In most cases you should not need to split as a list, because the
2988 In most cases you should not need to split as a list, because the
2989 returned value is a special type of string which can automatically
2989 returned value is a special type of string which can automatically
2990 provide its contents either as a list (split on newlines) or as a
2990 provide its contents either as a list (split on newlines) or as a
2991 space-separated string. These are convenient, respectively, either
2991 space-separated string. These are convenient, respectively, either
2992 for sequential processing or to be passed to a shell command.
2992 for sequential processing or to be passed to a shell command.
2993
2993
2994 For example:
2994 For example:
2995
2995
2996 # all-random
2996 # all-random
2997
2997
2998 # Capture into variable a
2998 # Capture into variable a
2999 In [1]: sc a=ls *py
2999 In [1]: sc a=ls *py
3000
3000
3001 # a is a string with embedded newlines
3001 # a is a string with embedded newlines
3002 In [2]: a
3002 In [2]: a
3003 Out[2]: 'setup.py\\nwin32_manual_post_install.py'
3003 Out[2]: 'setup.py\\nwin32_manual_post_install.py'
3004
3004
3005 # which can be seen as a list:
3005 # which can be seen as a list:
3006 In [3]: a.l
3006 In [3]: a.l
3007 Out[3]: ['setup.py', 'win32_manual_post_install.py']
3007 Out[3]: ['setup.py', 'win32_manual_post_install.py']
3008
3008
3009 # or as a whitespace-separated string:
3009 # or as a whitespace-separated string:
3010 In [4]: a.s
3010 In [4]: a.s
3011 Out[4]: 'setup.py win32_manual_post_install.py'
3011 Out[4]: 'setup.py win32_manual_post_install.py'
3012
3012
3013 # a.s is useful to pass as a single command line:
3013 # a.s is useful to pass as a single command line:
3014 In [5]: !wc -l $a.s
3014 In [5]: !wc -l $a.s
3015 146 setup.py
3015 146 setup.py
3016 130 win32_manual_post_install.py
3016 130 win32_manual_post_install.py
3017 276 total
3017 276 total
3018
3018
3019 # while the list form is useful to loop over:
3019 # while the list form is useful to loop over:
3020 In [6]: for f in a.l:
3020 In [6]: for f in a.l:
3021 ...: !wc -l $f
3021 ...: !wc -l $f
3022 ...:
3022 ...:
3023 146 setup.py
3023 146 setup.py
3024 130 win32_manual_post_install.py
3024 130 win32_manual_post_install.py
3025
3025
3026 Similiarly, the lists returned by the -l option are also special, in
3026 Similiarly, the lists returned by the -l option are also special, in
3027 the sense that you can equally invoke the .s attribute on them to
3027 the sense that you can equally invoke the .s attribute on them to
3028 automatically get a whitespace-separated string from their contents:
3028 automatically get a whitespace-separated string from their contents:
3029
3029
3030 In [7]: sc -l b=ls *py
3030 In [7]: sc -l b=ls *py
3031
3031
3032 In [8]: b
3032 In [8]: b
3033 Out[8]: ['setup.py', 'win32_manual_post_install.py']
3033 Out[8]: ['setup.py', 'win32_manual_post_install.py']
3034
3034
3035 In [9]: b.s
3035 In [9]: b.s
3036 Out[9]: 'setup.py win32_manual_post_install.py'
3036 Out[9]: 'setup.py win32_manual_post_install.py'
3037
3037
3038 In summary, both the lists and strings used for ouptut capture have
3038 In summary, both the lists and strings used for ouptut capture have
3039 the following special attributes:
3039 the following special attributes:
3040
3040
3041 .l (or .list) : value as list.
3041 .l (or .list) : value as list.
3042 .n (or .nlstr): value as newline-separated string.
3042 .n (or .nlstr): value as newline-separated string.
3043 .s (or .spstr): value as space-separated string.
3043 .s (or .spstr): value as space-separated string.
3044 """
3044 """
3045
3045
3046 opts,args = self.parse_options(parameter_s,'lv')
3046 opts,args = self.parse_options(parameter_s,'lv')
3047 # Try to get a variable name and command to run
3047 # Try to get a variable name and command to run
3048 try:
3048 try:
3049 # the variable name must be obtained from the parse_options
3049 # the variable name must be obtained from the parse_options
3050 # output, which uses shlex.split to strip options out.
3050 # output, which uses shlex.split to strip options out.
3051 var,_ = args.split('=',1)
3051 var,_ = args.split('=',1)
3052 var = var.strip()
3052 var = var.strip()
3053 # But the the command has to be extracted from the original input
3053 # But the the command has to be extracted from the original input
3054 # parameter_s, not on what parse_options returns, to avoid the
3054 # parameter_s, not on what parse_options returns, to avoid the
3055 # quote stripping which shlex.split performs on it.
3055 # quote stripping which shlex.split performs on it.
3056 _,cmd = parameter_s.split('=',1)
3056 _,cmd = parameter_s.split('=',1)
3057 except ValueError:
3057 except ValueError:
3058 var,cmd = '',''
3058 var,cmd = '',''
3059 # If all looks ok, proceed
3059 # If all looks ok, proceed
3060 out,err = self.shell.getoutputerror(cmd)
3060 out,err = self.shell.getoutputerror(cmd)
3061 if err:
3061 if err:
3062 print >> Term.cerr,err
3062 print >> Term.cerr,err
3063 if opts.has_key('l'):
3063 if opts.has_key('l'):
3064 out = SList(out.split('\n'))
3064 out = SList(out.split('\n'))
3065 else:
3065 else:
3066 out = LSString(out)
3066 out = LSString(out)
3067 if opts.has_key('v'):
3067 if opts.has_key('v'):
3068 print '%s ==\n%s' % (var,pformat(out))
3068 print '%s ==\n%s' % (var,pformat(out))
3069 if var:
3069 if var:
3070 self.shell.user_ns.update({var:out})
3070 self.shell.user_ns.update({var:out})
3071 else:
3071 else:
3072 return out
3072 return out
3073
3073
3074 def magic_sx(self, parameter_s=''):
3074 def magic_sx(self, parameter_s=''):
3075 """Shell execute - run a shell command and capture its output.
3075 """Shell execute - run a shell command and capture its output.
3076
3076
3077 %sx command
3077 %sx command
3078
3078
3079 IPython will run the given command using commands.getoutput(), and
3079 IPython will run the given command using commands.getoutput(), and
3080 return the result formatted as a list (split on '\\n'). Since the
3080 return the result formatted as a list (split on '\\n'). Since the
3081 output is _returned_, it will be stored in ipython's regular output
3081 output is _returned_, it will be stored in ipython's regular output
3082 cache Out[N] and in the '_N' automatic variables.
3082 cache Out[N] and in the '_N' automatic variables.
3083
3083
3084 Notes:
3084 Notes:
3085
3085
3086 1) If an input line begins with '!!', then %sx is automatically
3086 1) If an input line begins with '!!', then %sx is automatically
3087 invoked. That is, while:
3087 invoked. That is, while:
3088 !ls
3088 !ls
3089 causes ipython to simply issue system('ls'), typing
3089 causes ipython to simply issue system('ls'), typing
3090 !!ls
3090 !!ls
3091 is a shorthand equivalent to:
3091 is a shorthand equivalent to:
3092 %sx ls
3092 %sx ls
3093
3093
3094 2) %sx differs from %sc in that %sx automatically splits into a list,
3094 2) %sx differs from %sc in that %sx automatically splits into a list,
3095 like '%sc -l'. The reason for this is to make it as easy as possible
3095 like '%sc -l'. The reason for this is to make it as easy as possible
3096 to process line-oriented shell output via further python commands.
3096 to process line-oriented shell output via further python commands.
3097 %sc is meant to provide much finer control, but requires more
3097 %sc is meant to provide much finer control, but requires more
3098 typing.
3098 typing.
3099
3099
3100 3) Just like %sc -l, this is a list with special attributes:
3100 3) Just like %sc -l, this is a list with special attributes:
3101
3101
3102 .l (or .list) : value as list.
3102 .l (or .list) : value as list.
3103 .n (or .nlstr): value as newline-separated string.
3103 .n (or .nlstr): value as newline-separated string.
3104 .s (or .spstr): value as whitespace-separated string.
3104 .s (or .spstr): value as whitespace-separated string.
3105
3105
3106 This is very useful when trying to use such lists as arguments to
3106 This is very useful when trying to use such lists as arguments to
3107 system commands."""
3107 system commands."""
3108
3108
3109 if parameter_s:
3109 if parameter_s:
3110 out,err = self.shell.getoutputerror(parameter_s)
3110 out,err = self.shell.getoutputerror(parameter_s)
3111 if err:
3111 if err:
3112 print >> Term.cerr,err
3112 print >> Term.cerr,err
3113 return SList(out.split('\n'))
3113 return SList(out.split('\n'))
3114
3114
3115 def magic_bg(self, parameter_s=''):
3115 def magic_bg(self, parameter_s=''):
3116 """Run a job in the background, in a separate thread.
3116 """Run a job in the background, in a separate thread.
3117
3117
3118 For example,
3118 For example,
3119
3119
3120 %bg myfunc(x,y,z=1)
3120 %bg myfunc(x,y,z=1)
3121
3121
3122 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
3122 will execute 'myfunc(x,y,z=1)' in a background thread. As soon as the
3123 execution starts, a message will be printed indicating the job
3123 execution starts, a message will be printed indicating the job
3124 number. If your job number is 5, you can use
3124 number. If your job number is 5, you can use
3125
3125
3126 myvar = jobs.result(5) or myvar = jobs[5].result
3126 myvar = jobs.result(5) or myvar = jobs[5].result
3127
3127
3128 to assign this result to variable 'myvar'.
3128 to assign this result to variable 'myvar'.
3129
3129
3130 IPython has a job manager, accessible via the 'jobs' object. You can
3130 IPython has a job manager, accessible via the 'jobs' object. You can
3131 type jobs? to get more information about it, and use jobs.<TAB> to see
3131 type jobs? to get more information about it, and use jobs.<TAB> to see
3132 its attributes. All attributes not starting with an underscore are
3132 its attributes. All attributes not starting with an underscore are
3133 meant for public use.
3133 meant for public use.
3134
3134
3135 In particular, look at the jobs.new() method, which is used to create
3135 In particular, look at the jobs.new() method, which is used to create
3136 new jobs. This magic %bg function is just a convenience wrapper
3136 new jobs. This magic %bg function is just a convenience wrapper
3137 around jobs.new(), for expression-based jobs. If you want to create a
3137 around jobs.new(), for expression-based jobs. If you want to create a
3138 new job with an explicit function object and arguments, you must call
3138 new job with an explicit function object and arguments, you must call
3139 jobs.new() directly.
3139 jobs.new() directly.
3140
3140
3141 The jobs.new docstring also describes in detail several important
3141 The jobs.new docstring also describes in detail several important
3142 caveats associated with a thread-based model for background job
3142 caveats associated with a thread-based model for background job
3143 execution. Type jobs.new? for details.
3143 execution. Type jobs.new? for details.
3144
3144
3145 You can check the status of all jobs with jobs.status().
3145 You can check the status of all jobs with jobs.status().
3146
3146
3147 The jobs variable is set by IPython into the Python builtin namespace.
3147 The jobs variable is set by IPython into the Python builtin namespace.
3148 If you ever declare a variable named 'jobs', you will shadow this
3148 If you ever declare a variable named 'jobs', you will shadow this
3149 name. You can either delete your global jobs variable to regain
3149 name. You can either delete your global jobs variable to regain
3150 access to the job manager, or make a new name and assign it manually
3150 access to the job manager, or make a new name and assign it manually
3151 to the manager (stored in IPython's namespace). For example, to
3151 to the manager (stored in IPython's namespace). For example, to
3152 assign the job manager to the Jobs name, use:
3152 assign the job manager to the Jobs name, use:
3153
3153
3154 Jobs = __builtins__.jobs"""
3154 Jobs = __builtins__.jobs"""
3155
3155
3156 self.shell.jobs.new(parameter_s,self.shell.user_ns)
3156 self.shell.jobs.new(parameter_s,self.shell.user_ns)
3157
3157
3158 def magic_r(self, parameter_s=''):
3158 def magic_r(self, parameter_s=''):
3159 """Repeat previous input.
3159 """Repeat previous input.
3160
3160
3161 Note: Consider using the more powerfull %rep instead!
3161 Note: Consider using the more powerfull %rep instead!
3162
3162
3163 If given an argument, repeats the previous command which starts with
3163 If given an argument, repeats the previous command which starts with
3164 the same string, otherwise it just repeats the previous input.
3164 the same string, otherwise it just repeats the previous input.
3165
3165
3166 Shell escaped commands (with ! as first character) are not recognized
3166 Shell escaped commands (with ! as first character) are not recognized
3167 by this system, only pure python code and magic commands.
3167 by this system, only pure python code and magic commands.
3168 """
3168 """
3169
3169
3170 start = parameter_s.strip()
3170 start = parameter_s.strip()
3171 esc_magic = self.shell.ESC_MAGIC
3171 esc_magic = self.shell.ESC_MAGIC
3172 # Identify magic commands even if automagic is on (which means
3172 # Identify magic commands even if automagic is on (which means
3173 # the in-memory version is different from that typed by the user).
3173 # the in-memory version is different from that typed by the user).
3174 if self.shell.rc.automagic:
3174 if self.shell.rc.automagic:
3175 start_magic = esc_magic+start
3175 start_magic = esc_magic+start
3176 else:
3176 else:
3177 start_magic = start
3177 start_magic = start
3178 # Look through the input history in reverse
3178 # Look through the input history in reverse
3179 for n in range(len(self.shell.input_hist)-2,0,-1):
3179 for n in range(len(self.shell.input_hist)-2,0,-1):
3180 input = self.shell.input_hist[n]
3180 input = self.shell.input_hist[n]
3181 # skip plain 'r' lines so we don't recurse to infinity
3181 # skip plain 'r' lines so we don't recurse to infinity
3182 if input != '_ip.magic("r")\n' and \
3182 if input != '_ip.magic("r")\n' and \
3183 (input.startswith(start) or input.startswith(start_magic)):
3183 (input.startswith(start) or input.startswith(start_magic)):
3184 #print 'match',`input` # dbg
3184 #print 'match',`input` # dbg
3185 print 'Executing:',input,
3185 print 'Executing:',input,
3186 self.shell.runlines(input)
3186 self.shell.runlines(input)
3187 return
3187 return
3188 print 'No previous input matching `%s` found.' % start
3188 print 'No previous input matching `%s` found.' % start
3189
3189
3190
3190
3191 def magic_bookmark(self, parameter_s=''):
3191 def magic_bookmark(self, parameter_s=''):
3192 """Manage IPython's bookmark system.
3192 """Manage IPython's bookmark system.
3193
3193
3194 %bookmark <name> - set bookmark to current dir
3194 %bookmark <name> - set bookmark to current dir
3195 %bookmark <name> <dir> - set bookmark to <dir>
3195 %bookmark <name> <dir> - set bookmark to <dir>
3196 %bookmark -l - list all bookmarks
3196 %bookmark -l - list all bookmarks
3197 %bookmark -d <name> - remove bookmark
3197 %bookmark -d <name> - remove bookmark
3198 %bookmark -r - remove all bookmarks
3198 %bookmark -r - remove all bookmarks
3199
3199
3200 You can later on access a bookmarked folder with:
3200 You can later on access a bookmarked folder with:
3201 %cd -b <name>
3201 %cd -b <name>
3202 or simply '%cd <name>' if there is no directory called <name> AND
3202 or simply '%cd <name>' if there is no directory called <name> AND
3203 there is such a bookmark defined.
3203 there is such a bookmark defined.
3204
3204
3205 Your bookmarks persist through IPython sessions, but they are
3205 Your bookmarks persist through IPython sessions, but they are
3206 associated with each profile."""
3206 associated with each profile."""
3207
3207
3208 opts,args = self.parse_options(parameter_s,'drl',mode='list')
3208 opts,args = self.parse_options(parameter_s,'drl',mode='list')
3209 if len(args) > 2:
3209 if len(args) > 2:
3210 raise UsageError("%bookmark: too many arguments")
3210 raise UsageError("%bookmark: too many arguments")
3211
3211
3212 bkms = self.db.get('bookmarks',{})
3212 bkms = self.db.get('bookmarks',{})
3213
3213
3214 if opts.has_key('d'):
3214 if opts.has_key('d'):
3215 try:
3215 try:
3216 todel = args[0]
3216 todel = args[0]
3217 except IndexError:
3217 except IndexError:
3218 raise UsageError(
3218 raise UsageError(
3219 "%bookmark -d: must provide a bookmark to delete")
3219 "%bookmark -d: must provide a bookmark to delete")
3220 else:
3220 else:
3221 try:
3221 try:
3222 del bkms[todel]
3222 del bkms[todel]
3223 except KeyError:
3223 except KeyError:
3224 raise UsageError(
3224 raise UsageError(
3225 "%%bookmark -d: Can't delete bookmark '%s'" % todel)
3225 "%%bookmark -d: Can't delete bookmark '%s'" % todel)
3226
3226
3227 elif opts.has_key('r'):
3227 elif opts.has_key('r'):
3228 bkms = {}
3228 bkms = {}
3229 elif opts.has_key('l'):
3229 elif opts.has_key('l'):
3230 bks = bkms.keys()
3230 bks = bkms.keys()
3231 bks.sort()
3231 bks.sort()
3232 if bks:
3232 if bks:
3233 size = max(map(len,bks))
3233 size = max(map(len,bks))
3234 else:
3234 else:
3235 size = 0
3235 size = 0
3236 fmt = '%-'+str(size)+'s -> %s'
3236 fmt = '%-'+str(size)+'s -> %s'
3237 print 'Current bookmarks:'
3237 print 'Current bookmarks:'
3238 for bk in bks:
3238 for bk in bks:
3239 print fmt % (bk,bkms[bk])
3239 print fmt % (bk,bkms[bk])
3240 else:
3240 else:
3241 if not args:
3241 if not args:
3242 raise UsageError("%bookmark: You must specify the bookmark name")
3242 raise UsageError("%bookmark: You must specify the bookmark name")
3243 elif len(args)==1:
3243 elif len(args)==1:
3244 bkms[args[0]] = os.getcwd()
3244 bkms[args[0]] = os.getcwd()
3245 elif len(args)==2:
3245 elif len(args)==2:
3246 bkms[args[0]] = args[1]
3246 bkms[args[0]] = args[1]
3247 self.db['bookmarks'] = bkms
3247 self.db['bookmarks'] = bkms
3248
3248
3249 def magic_pycat(self, parameter_s=''):
3249 def magic_pycat(self, parameter_s=''):
3250 """Show a syntax-highlighted file through a pager.
3250 """Show a syntax-highlighted file through a pager.
3251
3251
3252 This magic is similar to the cat utility, but it will assume the file
3252 This magic is similar to the cat utility, but it will assume the file
3253 to be Python source and will show it with syntax highlighting. """
3253 to be Python source and will show it with syntax highlighting. """
3254
3254
3255 try:
3255 try:
3256 filename = get_py_filename(parameter_s)
3256 filename = get_py_filename(parameter_s)
3257 cont = file_read(filename)
3257 cont = file_read(filename)
3258 except IOError:
3258 except IOError:
3259 try:
3259 try:
3260 cont = eval(parameter_s,self.user_ns)
3260 cont = eval(parameter_s,self.user_ns)
3261 except NameError:
3261 except NameError:
3262 cont = None
3262 cont = None
3263 if cont is None:
3263 if cont is None:
3264 print "Error: no such file or variable"
3264 print "Error: no such file or variable"
3265 return
3265 return
3266
3266
3267 page(self.shell.pycolorize(cont),
3267 page(self.shell.pycolorize(cont),
3268 screen_lines=self.shell.rc.screen_length)
3268 screen_lines=self.shell.rc.screen_length)
3269
3269
3270 def _rerun_pasted(self):
3270 def _rerun_pasted(self):
3271 """ Rerun a previously pasted command.
3271 """ Rerun a previously pasted command.
3272 """
3272 """
3273 b = self.user_ns.get('pasted_block', None)
3273 b = self.user_ns.get('pasted_block', None)
3274 if b is None:
3274 if b is None:
3275 raise UsageError('No previous pasted block available')
3275 raise UsageError('No previous pasted block available')
3276 print "Re-executing '%s...' (%d chars)"% (b.split('\n',1)[0], len(b))
3276 print "Re-executing '%s...' (%d chars)"% (b.split('\n',1)[0], len(b))
3277 exec b in self.user_ns
3277 exec b in self.user_ns
3278
3278
3279 def _get_pasted_lines(self, sentinel):
3279 def _get_pasted_lines(self, sentinel):
3280 """ Yield pasted lines until the user enters the given sentinel value.
3280 """ Yield pasted lines until the user enters the given sentinel value.
3281 """
3281 """
3282 from IPython.core import iplib
3282 from IPython.core import iplib
3283 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
3283 print "Pasting code; enter '%s' alone on the line to stop." % sentinel
3284 while True:
3284 while True:
3285 l = iplib.raw_input_original(':')
3285 l = iplib.raw_input_original(':')
3286 if l == sentinel:
3286 if l == sentinel:
3287 return
3287 return
3288 else:
3288 else:
3289 yield l
3289 yield l
3290
3290
3291 def _strip_pasted_lines_for_code(self, raw_lines):
3291 def _strip_pasted_lines_for_code(self, raw_lines):
3292 """ Strip non-code parts of a sequence of lines to return a block of
3292 """ Strip non-code parts of a sequence of lines to return a block of
3293 code.
3293 code.
3294 """
3294 """
3295 # Regular expressions that declare text we strip from the input:
3295 # Regular expressions that declare text we strip from the input:
3296 strip_re = [r'^\s*In \[\d+\]:', # IPython input prompt
3296 strip_re = [r'^\s*In \[\d+\]:', # IPython input prompt
3297 r'^\s*(\s?>)+', # Python input prompt
3297 r'^\s*(\s?>)+', # Python input prompt
3298 r'^\s*\.{3,}', # Continuation prompts
3298 r'^\s*\.{3,}', # Continuation prompts
3299 r'^\++',
3299 r'^\++',
3300 ]
3300 ]
3301
3301
3302 strip_from_start = map(re.compile,strip_re)
3302 strip_from_start = map(re.compile,strip_re)
3303
3303
3304 lines = []
3304 lines = []
3305 for l in raw_lines:
3305 for l in raw_lines:
3306 for pat in strip_from_start:
3306 for pat in strip_from_start:
3307 l = pat.sub('',l)
3307 l = pat.sub('',l)
3308 lines.append(l)
3308 lines.append(l)
3309
3309
3310 block = "\n".join(lines) + '\n'
3310 block = "\n".join(lines) + '\n'
3311 #print "block:\n",block
3311 #print "block:\n",block
3312 return block
3312 return block
3313
3313
3314 def _execute_block(self, block, par):
3314 def _execute_block(self, block, par):
3315 """ Execute a block, or store it in a variable, per the user's request.
3315 """ Execute a block, or store it in a variable, per the user's request.
3316 """
3316 """
3317 if not par:
3317 if not par:
3318 b = textwrap.dedent(block)
3318 b = textwrap.dedent(block)
3319 self.user_ns['pasted_block'] = b
3319 self.user_ns['pasted_block'] = b
3320 exec b in self.user_ns
3320 exec b in self.user_ns
3321 else:
3321 else:
3322 self.user_ns[par] = SList(block.splitlines())
3322 self.user_ns[par] = SList(block.splitlines())
3323 print "Block assigned to '%s'" % par
3323 print "Block assigned to '%s'" % par
3324
3324
3325 def magic_cpaste(self, parameter_s=''):
3325 def magic_cpaste(self, parameter_s=''):
3326 """Allows you to paste & execute a pre-formatted code block from clipboard.
3326 """Allows you to paste & execute a pre-formatted code block from clipboard.
3327
3327
3328 You must terminate the block with '--' (two minus-signs) alone on the
3328 You must terminate the block with '--' (two minus-signs) alone on the
3329 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
3329 line. You can also provide your own sentinel with '%paste -s %%' ('%%'
3330 is the new sentinel for this operation)
3330 is the new sentinel for this operation)
3331
3331
3332 The block is dedented prior to execution to enable execution of method
3332 The block is dedented prior to execution to enable execution of method
3333 definitions. '>' and '+' characters at the beginning of a line are
3333 definitions. '>' and '+' characters at the beginning of a line are
3334 ignored, to allow pasting directly from e-mails, diff files and
3334 ignored, to allow pasting directly from e-mails, diff files and
3335 doctests (the '...' continuation prompt is also stripped). The
3335 doctests (the '...' continuation prompt is also stripped). The
3336 executed block is also assigned to variable named 'pasted_block' for
3336 executed block is also assigned to variable named 'pasted_block' for
3337 later editing with '%edit pasted_block'.
3337 later editing with '%edit pasted_block'.
3338
3338
3339 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
3339 You can also pass a variable name as an argument, e.g. '%cpaste foo'.
3340 This assigns the pasted block to variable 'foo' as string, without
3340 This assigns the pasted block to variable 'foo' as string, without
3341 dedenting or executing it (preceding >>> and + is still stripped)
3341 dedenting or executing it (preceding >>> and + is still stripped)
3342
3342
3343 '%cpaste -r' re-executes the block previously entered by cpaste.
3343 '%cpaste -r' re-executes the block previously entered by cpaste.
3344
3344
3345 Do not be alarmed by garbled output on Windows (it's a readline bug).
3345 Do not be alarmed by garbled output on Windows (it's a readline bug).
3346 Just press enter and type -- (and press enter again) and the block
3346 Just press enter and type -- (and press enter again) and the block
3347 will be what was just pasted.
3347 will be what was just pasted.
3348
3348
3349 IPython statements (magics, shell escapes) are not supported (yet).
3349 IPython statements (magics, shell escapes) are not supported (yet).
3350
3350
3351 See also
3351 See also
3352 --------
3352 --------
3353 paste: automatically pull code from clipboard.
3353 paste: automatically pull code from clipboard.
3354 """
3354 """
3355
3355
3356 opts,args = self.parse_options(parameter_s,'rs:',mode='string')
3356 opts,args = self.parse_options(parameter_s,'rs:',mode='string')
3357 par = args.strip()
3357 par = args.strip()
3358 if opts.has_key('r'):
3358 if opts.has_key('r'):
3359 self._rerun_pasted()
3359 self._rerun_pasted()
3360 return
3360 return
3361
3361
3362 sentinel = opts.get('s','--')
3362 sentinel = opts.get('s','--')
3363
3363
3364 block = self._strip_pasted_lines_for_code(
3364 block = self._strip_pasted_lines_for_code(
3365 self._get_pasted_lines(sentinel))
3365 self._get_pasted_lines(sentinel))
3366
3366
3367 self._execute_block(block, par)
3367 self._execute_block(block, par)
3368
3368
3369 def magic_paste(self, parameter_s=''):
3369 def magic_paste(self, parameter_s=''):
3370 """Allows you to paste & execute a pre-formatted code block from clipboard.
3370 """Allows you to paste & execute a pre-formatted code block from clipboard.
3371
3371
3372 The text is pulled directly from the clipboard without user
3372 The text is pulled directly from the clipboard without user
3373 intervention and printed back on the screen before execution (unless
3373 intervention and printed back on the screen before execution (unless
3374 the -q flag is given to force quiet mode).
3374 the -q flag is given to force quiet mode).
3375
3375
3376 The block is dedented prior to execution to enable execution of method
3376 The block is dedented prior to execution to enable execution of method
3377 definitions. '>' and '+' characters at the beginning of a line are
3377 definitions. '>' and '+' characters at the beginning of a line are
3378 ignored, to allow pasting directly from e-mails, diff files and
3378 ignored, to allow pasting directly from e-mails, diff files and
3379 doctests (the '...' continuation prompt is also stripped). The
3379 doctests (the '...' continuation prompt is also stripped). The
3380 executed block is also assigned to variable named 'pasted_block' for
3380 executed block is also assigned to variable named 'pasted_block' for
3381 later editing with '%edit pasted_block'.
3381 later editing with '%edit pasted_block'.
3382
3382
3383 You can also pass a variable name as an argument, e.g. '%paste foo'.
3383 You can also pass a variable name as an argument, e.g. '%paste foo'.
3384 This assigns the pasted block to variable 'foo' as string, without
3384 This assigns the pasted block to variable 'foo' as string, without
3385 dedenting or executing it (preceding >>> and + is still stripped)
3385 dedenting or executing it (preceding >>> and + is still stripped)
3386
3386
3387 Options
3387 Options
3388 -------
3388 -------
3389
3389
3390 -r: re-executes the block previously entered by cpaste.
3390 -r: re-executes the block previously entered by cpaste.
3391
3391
3392 -q: quiet mode: do not echo the pasted text back to the terminal.
3392 -q: quiet mode: do not echo the pasted text back to the terminal.
3393
3393
3394 IPython statements (magics, shell escapes) are not supported (yet).
3394 IPython statements (magics, shell escapes) are not supported (yet).
3395
3395
3396 See also
3396 See also
3397 --------
3397 --------
3398 cpaste: manually paste code into terminal until you mark its end.
3398 cpaste: manually paste code into terminal until you mark its end.
3399 """
3399 """
3400 opts,args = self.parse_options(parameter_s,'rq',mode='string')
3400 opts,args = self.parse_options(parameter_s,'rq',mode='string')
3401 par = args.strip()
3401 par = args.strip()
3402 if opts.has_key('r'):
3402 if opts.has_key('r'):
3403 self._rerun_pasted()
3403 self._rerun_pasted()
3404 return
3404 return
3405
3405
3406 text = self.shell.hooks.clipboard_get()
3406 text = self.shell.hooks.clipboard_get()
3407 block = self._strip_pasted_lines_for_code(text.splitlines())
3407 block = self._strip_pasted_lines_for_code(text.splitlines())
3408
3408
3409 # By default, echo back to terminal unless quiet mode is requested
3409 # By default, echo back to terminal unless quiet mode is requested
3410 if not opts.has_key('q'):
3410 if not opts.has_key('q'):
3411 write = self.shell.write
3411 write = self.shell.write
3412 write(block)
3412 write(block)
3413 if not block.endswith('\n'):
3413 if not block.endswith('\n'):
3414 write('\n')
3414 write('\n')
3415 write("## -- End pasted text --\n")
3415 write("## -- End pasted text --\n")
3416
3416
3417 self._execute_block(block, par)
3417 self._execute_block(block, par)
3418
3418
3419 def magic_quickref(self,arg):
3419 def magic_quickref(self,arg):
3420 """ Show a quick reference sheet """
3420 """ Show a quick reference sheet """
3421 import IPython.core.usage
3421 import IPython.core.usage
3422 qr = IPython.core.usage.quick_reference + self.magic_magic('-brief')
3422 qr = IPython.core.usage.quick_reference + self.magic_magic('-brief')
3423
3423
3424 page(qr)
3424 page(qr)
3425
3425
3426 def magic_upgrade(self,arg):
3426 def magic_upgrade(self,arg):
3427 """ Upgrade your IPython installation
3427 """ Upgrade your IPython installation
3428
3428
3429 This will copy the config files that don't yet exist in your
3429 This will copy the config files that don't yet exist in your
3430 ipython dir from the system config dir. Use this after upgrading
3430 ipython dir from the system config dir. Use this after upgrading
3431 IPython if you don't wish to delete your .ipython dir.
3431 IPython if you don't wish to delete your .ipython dir.
3432
3432
3433 Call with -nolegacy to get rid of ipythonrc* files (recommended for
3433 Call with -nolegacy to get rid of ipythonrc* files (recommended for
3434 new users)
3434 new users)
3435
3435
3436 """
3436 """
3437 ip = self.getapi()
3437 ip = self.getapi()
3438 ipinstallation = path(IPython.__file__).dirname()
3438 ipinstallation = path(IPython.__file__).dirname()
3439 upgrade_script = '%s "%s"' % (sys.executable,ipinstallation / 'utils' / 'upgradedir.py')
3439 upgrade_script = '%s "%s"' % (sys.executable,ipinstallation / 'utils' / 'upgradedir.py')
3440 src_config = ipinstallation / 'config' / 'userconfig'
3440 src_config = ipinstallation / 'config' / 'userconfig'
3441 userdir = path(ip.options.ipythondir)
3441 userdir = path(ip.options.ipythondir)
3442 cmd = '%s "%s" "%s"' % (upgrade_script, src_config, userdir)
3442 cmd = '%s "%s" "%s"' % (upgrade_script, src_config, userdir)
3443 print ">",cmd
3443 print ">",cmd
3444 shell(cmd)
3444 shell(cmd)
3445 if arg == '-nolegacy':
3445 if arg == '-nolegacy':
3446 legacy = userdir.files('ipythonrc*')
3446 legacy = userdir.files('ipythonrc*')
3447 print "Nuking legacy files:",legacy
3447 print "Nuking legacy files:",legacy
3448
3448
3449 [p.remove() for p in legacy]
3449 [p.remove() for p in legacy]
3450 suffix = (sys.platform == 'win32' and '.ini' or '')
3450 suffix = (sys.platform == 'win32' and '.ini' or '')
3451 (userdir / ('ipythonrc' + suffix)).write_text('# Empty, see ipy_user_conf.py\n')
3451 (userdir / ('ipythonrc' + suffix)).write_text('# Empty, see ipy_user_conf.py\n')
3452
3452
3453
3453
3454 def magic_doctest_mode(self,parameter_s=''):
3454 def magic_doctest_mode(self,parameter_s=''):
3455 """Toggle doctest mode on and off.
3455 """Toggle doctest mode on and off.
3456
3456
3457 This mode allows you to toggle the prompt behavior between normal
3457 This mode allows you to toggle the prompt behavior between normal
3458 IPython prompts and ones that are as similar to the default IPython
3458 IPython prompts and ones that are as similar to the default IPython
3459 interpreter as possible.
3459 interpreter as possible.
3460
3460
3461 It also supports the pasting of code snippets that have leading '>>>'
3461 It also supports the pasting of code snippets that have leading '>>>'
3462 and '...' prompts in them. This means that you can paste doctests from
3462 and '...' prompts in them. This means that you can paste doctests from
3463 files or docstrings (even if they have leading whitespace), and the
3463 files or docstrings (even if they have leading whitespace), and the
3464 code will execute correctly. You can then use '%history -tn' to see
3464 code will execute correctly. You can then use '%history -tn' to see
3465 the translated history without line numbers; this will give you the
3465 the translated history without line numbers; this will give you the
3466 input after removal of all the leading prompts and whitespace, which
3466 input after removal of all the leading prompts and whitespace, which
3467 can be pasted back into an editor.
3467 can be pasted back into an editor.
3468
3468
3469 With these features, you can switch into this mode easily whenever you
3469 With these features, you can switch into this mode easily whenever you
3470 need to do testing and changes to doctests, without having to leave
3470 need to do testing and changes to doctests, without having to leave
3471 your existing IPython session.
3471 your existing IPython session.
3472 """
3472 """
3473
3473
3474 # XXX - Fix this to have cleaner activate/deactivate calls.
3474 # XXX - Fix this to have cleaner activate/deactivate calls.
3475 from IPython.extensions import InterpreterPasteInput as ipaste
3475 from IPython.extensions import InterpreterPasteInput as ipaste
3476 from IPython.utils.ipstruct import Struct
3476 from IPython.utils.ipstruct import Struct
3477
3477
3478 # Shorthands
3478 # Shorthands
3479 shell = self.shell
3479 shell = self.shell
3480 oc = shell.outputcache
3480 oc = shell.outputcache
3481 rc = shell.rc
3481 rc = shell.rc
3482 meta = shell.meta
3482 meta = shell.meta
3483 # dstore is a data store kept in the instance metadata bag to track any
3483 # dstore is a data store kept in the instance metadata bag to track any
3484 # changes we make, so we can undo them later.
3484 # changes we make, so we can undo them later.
3485 dstore = meta.setdefault('doctest_mode',Struct())
3485 dstore = meta.setdefault('doctest_mode',Struct())
3486 save_dstore = dstore.setdefault
3486 save_dstore = dstore.setdefault
3487
3487
3488 # save a few values we'll need to recover later
3488 # save a few values we'll need to recover later
3489 mode = save_dstore('mode',False)
3489 mode = save_dstore('mode',False)
3490 save_dstore('rc_pprint',rc.pprint)
3490 save_dstore('rc_pprint',rc.pprint)
3491 save_dstore('xmode',shell.InteractiveTB.mode)
3491 save_dstore('xmode',shell.InteractiveTB.mode)
3492 save_dstore('rc_separate_out',rc.separate_out)
3492 save_dstore('rc_separate_out',rc.separate_out)
3493 save_dstore('rc_separate_out2',rc.separate_out2)
3493 save_dstore('rc_separate_out2',rc.separate_out2)
3494 save_dstore('rc_prompts_pad_left',rc.prompts_pad_left)
3494 save_dstore('rc_prompts_pad_left',rc.prompts_pad_left)
3495 save_dstore('rc_separate_in',rc.separate_in)
3495 save_dstore('rc_separate_in',rc.separate_in)
3496
3496
3497 if mode == False:
3497 if mode == False:
3498 # turn on
3498 # turn on
3499 ipaste.activate_prefilter()
3499 ipaste.activate_prefilter()
3500
3500
3501 oc.prompt1.p_template = '>>> '
3501 oc.prompt1.p_template = '>>> '
3502 oc.prompt2.p_template = '... '
3502 oc.prompt2.p_template = '... '
3503 oc.prompt_out.p_template = ''
3503 oc.prompt_out.p_template = ''
3504
3504
3505 # Prompt separators like plain python
3505 # Prompt separators like plain python
3506 oc.input_sep = oc.prompt1.sep = ''
3506 oc.input_sep = oc.prompt1.sep = ''
3507 oc.output_sep = ''
3507 oc.output_sep = ''
3508 oc.output_sep2 = ''
3508 oc.output_sep2 = ''
3509
3509
3510 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3510 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3511 oc.prompt_out.pad_left = False
3511 oc.prompt_out.pad_left = False
3512
3512
3513 rc.pprint = False
3513 rc.pprint = False
3514
3514
3515 shell.magic_xmode('Plain')
3515 shell.magic_xmode('Plain')
3516
3516
3517 else:
3517 else:
3518 # turn off
3518 # turn off
3519 ipaste.deactivate_prefilter()
3519 ipaste.deactivate_prefilter()
3520
3520
3521 oc.prompt1.p_template = rc.prompt_in1
3521 oc.prompt1.p_template = rc.prompt_in1
3522 oc.prompt2.p_template = rc.prompt_in2
3522 oc.prompt2.p_template = rc.prompt_in2
3523 oc.prompt_out.p_template = rc.prompt_out
3523 oc.prompt_out.p_template = rc.prompt_out
3524
3524
3525 oc.input_sep = oc.prompt1.sep = dstore.rc_separate_in
3525 oc.input_sep = oc.prompt1.sep = dstore.rc_separate_in
3526
3526
3527 oc.output_sep = dstore.rc_separate_out
3527 oc.output_sep = dstore.rc_separate_out
3528 oc.output_sep2 = dstore.rc_separate_out2
3528 oc.output_sep2 = dstore.rc_separate_out2
3529
3529
3530 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3530 oc.prompt1.pad_left = oc.prompt2.pad_left = \
3531 oc.prompt_out.pad_left = dstore.rc_prompts_pad_left
3531 oc.prompt_out.pad_left = dstore.rc_prompts_pad_left
3532
3532
3533 rc.pprint = dstore.rc_pprint
3533 rc.pprint = dstore.rc_pprint
3534
3534
3535 shell.magic_xmode(dstore.xmode)
3535 shell.magic_xmode(dstore.xmode)
3536
3536
3537 # Store new mode and inform
3537 # Store new mode and inform
3538 dstore.mode = bool(1-int(mode))
3538 dstore.mode = bool(1-int(mode))
3539 print 'Doctest mode is:',
3539 print 'Doctest mode is:',
3540 print ['OFF','ON'][dstore.mode]
3540 print ['OFF','ON'][dstore.mode]
3541
3541
3542 def magic_gui(self, parameter_s=''):
3542 def magic_gui(self, parameter_s=''):
3543 """Enable or disable IPython GUI event loop integration.
3543 """Enable or disable IPython GUI event loop integration.
3544
3544
3545 %gui [-a] [GUINAME]
3546
3545 This magic replaces IPython's threaded shells that were activated
3547 This magic replaces IPython's threaded shells that were activated
3546 using the (pylab/wthread/etc.) command line flags. GUI toolkits
3548 using the (pylab/wthread/etc.) command line flags. GUI toolkits
3547 can now be enabled, disabled and swtiched at runtime and keyboard
3549 can now be enabled, disabled and swtiched at runtime and keyboard
3548 interrupts should work without any problems. The following toolkits
3550 interrupts should work without any problems. The following toolkits
3549 are supports: wxPython, PyQt4, PyGTK, and Tk::
3551 are supports: wxPython, PyQt4, PyGTK, and Tk::
3550
3552
3551 %gui wx # enable wxPython event loop integration
3553 %gui wx # enable wxPython event loop integration
3552 %gui qt4 # enable PyQt4 event loop integration
3554 %gui qt4 # enable PyQt4 event loop integration
3553 %gui gtk # enable PyGTK event loop integration
3555 %gui gtk # enable PyGTK event loop integration
3554 %gui tk # enable Tk event loop integration
3556 %gui tk # enable Tk event loop integration
3555 %gui # disable all event loop integration
3557 %gui # disable all event loop integration
3556
3558
3557 WARNING: after any of these has been called you can simply create
3559 WARNING: after any of these has been called you can simply create
3558 an application object, but DO NOT start the event loop yourself, as
3560 an application object, but DO NOT start the event loop yourself, as
3559 we have already handled that.
3561 we have already handled that.
3560
3562
3561 If you want us to create an appropriate application object add the
3563 If you want us to create an appropriate application object add the
3562 "-a" flag to your command::
3564 "-a" flag to your command::
3563
3565
3564 %gui -a wx
3566 %gui -a wx
3565
3567
3566 This is highly recommended for most users.
3568 This is highly recommended for most users.
3567 """
3569 """
3568 from IPython.lib import inputhook
3570 from IPython.lib import inputhook
3569 if "-a" in parameter_s:
3571 if "-a" in parameter_s:
3570 app = True
3572 app = True
3571 else:
3573 else:
3572 app = False
3574 app = False
3573 if not parameter_s:
3575 if not parameter_s:
3574 inputhook.clear_inputhook()
3576 inputhook.clear_inputhook()
3575 elif 'wx' in parameter_s:
3577 elif 'wx' in parameter_s:
3576 return inputhook.enable_wx(app)
3578 return inputhook.enable_wx(app)
3577 elif 'qt4' in parameter_s:
3579 elif 'qt4' in parameter_s:
3578 return inputhook.enable_qt4(app)
3580 return inputhook.enable_qt4(app)
3579 elif 'gtk' in parameter_s:
3581 elif 'gtk' in parameter_s:
3580 return inputhook.enable_gtk(app)
3582 return inputhook.enable_gtk(app)
3581 elif 'tk' in parameter_s:
3583 elif 'tk' in parameter_s:
3582 return inputhook.enable_tk(app)
3584 return inputhook.enable_tk(app)
3583
3585
3584
3586
3585 # end Magic
3587 # end Magic
@@ -1,181 +1,226 b''
1 #!/usr/bin/env python
1 #!/usr/bin/env python
2 # encoding: utf-8
2 # encoding: 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 # Code
22 # Code
23 #-----------------------------------------------------------------------------
23 #-----------------------------------------------------------------------------
24
24
25
25
26 class InputHookManager(object):
26 class InputHookManager(object):
27 """Manage PyOS_InputHook for different GUI toolkits."""
27 """Manage PyOS_InputHook for different GUI toolkits.
28
29 This class installs various hooks under ``PyOSInputHook`` to handle
30 GUI event loop integration.
31 """
28
32
29 def __init__(self):
33 def __init__(self):
30 self.PYFUNC = ctypes.PYFUNCTYPE(ctypes.c_int)
34 self.PYFUNC = ctypes.PYFUNCTYPE(ctypes.c_int)
31 self._reset()
35 self._reset()
32
36
33 def _reset(self):
37 def _reset(self):
34 self._callback_pyfunctype = None
38 self._callback_pyfunctype = None
35 self._callback = None
39 self._callback = None
36 self._installed = False
40 self._installed = False
41 self._current_gui = None
37
42
38 def get_pyos_inputhook(self):
43 def get_pyos_inputhook(self):
39 """Return the current PyOS_InputHook as a ctypes.c_void_p.
44 """Return the current PyOS_InputHook as a ctypes.c_void_p.
40 """
45 """
41 return ctypes.c_void_p.in_dll(ctypes.pythonapi,"PyOS_InputHook")
46 return ctypes.c_void_p.in_dll(ctypes.pythonapi,"PyOS_InputHook")
42
47
43 def get_pyos_inputhook_as_func(self):
48 def get_pyos_inputhook_as_func(self):
44 """Return the current PyOS_InputHook as a ctypes.PYFUNCYPE.
49 """Return the current PyOS_InputHook as a ctypes.PYFUNCYPE.
45 """
50 """
46 return self.PYFUNC.in_dll(ctypes.pythonapi,"PyOS_InputHook")
51 return self.PYFUNC.in_dll(ctypes.pythonapi,"PyOS_InputHook")
47
52
48 def set_inputhook(self, callback):
53 def set_inputhook(self, callback):
49 """Set PyOS_InputHook to callback and return the previous one.
54 """Set PyOS_InputHook to callback and return the previous one.
50 """
55 """
51 self._callback = callback
56 self._callback = callback
52 self._callback_pyfunctype = self.PYFUNC(callback)
57 self._callback_pyfunctype = self.PYFUNC(callback)
53 pyos_inputhook_ptr = self.get_pyos_inputhook()
58 pyos_inputhook_ptr = self.get_pyos_inputhook()
54 original = self.get_pyos_inputhook_as_func()
59 original = self.get_pyos_inputhook_as_func()
55 pyos_inputhook_ptr.value = \
60 pyos_inputhook_ptr.value = \
56 ctypes.cast(self._callback_pyfunctype, ctypes.c_void_p).value
61 ctypes.cast(self._callback_pyfunctype, ctypes.c_void_p).value
57 self._installed = True
62 self._installed = True
58 return original
63 return original
59
64
60 def clear_inputhook(self):
65 def clear_inputhook(self):
61 """Set PyOS_InputHook to NULL and return the previous one.
66 """Set PyOS_InputHook to NULL and return the previous one.
62 """
67 """
63 pyos_inputhook_ptr = self.get_pyos_inputhook()
68 pyos_inputhook_ptr = self.get_pyos_inputhook()
64 original = self.get_pyos_inputhook_as_func()
69 original = self.get_pyos_inputhook_as_func()
65 pyos_inputhook_ptr.value = ctypes.c_void_p(None).value
70 pyos_inputhook_ptr.value = ctypes.c_void_p(None).value
66 self._reset()
71 self._reset()
67 return original
72 return original
68
73
69 def enable_wx(self, app=False):
74 def enable_wx(self, app=False):
70 """Enable event loop integration with wxPython.
75 """Enable event loop integration with wxPython.
71
76
77 Parameters
78 ----------
79 app : bool
80 Create a running application object or not.
81
82 Notes
83 -----
72 This methods sets the PyOS_InputHook for wxPython, which allows
84 This methods sets the PyOS_InputHook for wxPython, which allows
73 the wxPython to integrate with terminal based applications like
85 the wxPython to integrate with terminal based applications like
74 IPython.
86 IPython.
75
87
76 Once this has been called, you can use wx interactively by doing::
88 Once this has been called, you can use wx interactively by doing::
77
89
78 >>> import wx
90 >>> import wx
79 >>> app = wx.App(redirect=False, clearSigInt=False)
91 >>> app = wx.App(redirect=False, clearSigInt=False)
80
92
81 Both options this constructor are important for things to work
93 Both options this constructor are important for things to work
82 properly in an interactive context.
94 properly in an interactive context.
83
95
84 But, *don't start the event loop*. That is handled automatically by
96 But, *don't start the event loop*. That is handled automatically by
85 PyOS_InputHook.
97 PyOS_InputHook.
86 """
98 """
87 from IPython.lib.inputhookwx import inputhook_wx
99 from IPython.lib.inputhookwx import inputhook_wx
88 self.set_inputhook(inputhook_wx)
100 self.set_inputhook(inputhook_wx)
101 self._current_gui = 'wx'
89 if app:
102 if app:
90 import wx
103 import wx
91 app = wx.App(redirect=False, clearSigInt=False)
104 app = wx.App(redirect=False, clearSigInt=False)
92 return app
105 return app
93
106
94 def disable_wx(self):
107 def disable_wx(self):
95 """Disable event loop integration with wxPython.
108 """Disable event loop integration with wxPython.
96
109
97 This merely sets PyOS_InputHook to NULL.
110 This merely sets PyOS_InputHook to NULL.
98 """
111 """
99 self.clear_inputhook()
112 self.clear_inputhook()
100
113
101 def enable_qt4(self, app=False):
114 def enable_qt4(self, app=False):
102 """Enable event loop integration with PyQt4.
115 """Enable event loop integration with PyQt4.
103
116
117 Parameters
118 ----------
119 app : bool
120 Create a running application object or not.
121
122 Notes
123 -----
104 This methods sets the PyOS_InputHook for wxPython, which allows
124 This methods sets the PyOS_InputHook for wxPython, which allows
105 the PyQt4 to integrate with terminal based applications like
125 the PyQt4 to integrate with terminal based applications like
106 IPython.
126 IPython.
107
127
108 Once this has been called, you can simply create a QApplication and
128 Once this has been called, you can simply create a QApplication and
109 use it. But, *don't start the event loop*. That is handled
129 use it. But, *don't start the event loop*. That is handled
110 automatically by PyOS_InputHook.
130 automatically by PyOS_InputHook.
111 """
131 """
112 from PyQt4 import QtCore
132 from PyQt4 import QtCore
113 # PyQt4 has had this since 4.3.1. In version 4.2, PyOS_InputHook
133 # PyQt4 has had this since 4.3.1. In version 4.2, PyOS_InputHook
114 # was set when QtCore was imported, but if it ever got removed,
134 # was set when QtCore was imported, but if it ever got removed,
115 # you couldn't reset it. For earlier versions we can
135 # you couldn't reset it. For earlier versions we can
116 # probably implement a ctypes version.
136 # probably implement a ctypes version.
117 try:
137 try:
118 QtCore.pyqtRestoreInputHook()
138 QtCore.pyqtRestoreInputHook()
119 except AttributeError:
139 except AttributeError:
120 pass
140 pass
141 self._current_gui = 'qt4'
121 if app:
142 if app:
122 from PyQt4 import QtGui
143 from PyQt4 import QtGui
123 app = QtGui.QApplication(sys.argv)
144 app = QtGui.QApplication(sys.argv)
124 return app
145 return app
125
146
126 def disable_qt4(self):
147 def disable_qt4(self):
127 """Disable event loop integration with PyQt4.
148 """Disable event loop integration with PyQt4.
128
149
129 This merely sets PyOS_InputHook to NULL.
150 This merely sets PyOS_InputHook to NULL.
130 """
151 """
131 self.clear_inputhook()
152 self.clear_inputhook()
132
153
133 def enable_gtk(self, app=False):
154 def enable_gtk(self, app=False):
134 """Enable event loop integration with PyGTK.
155 """Enable event loop integration with PyGTK.
135
156
157 Parameters
158 ----------
159 app : bool
160 Create a running application object or not.
161
162 Notes
163 -----
136 This methods sets the PyOS_InputHook for PyGTK, which allows
164 This methods sets the PyOS_InputHook for PyGTK, which allows
137 the PyGTK to integrate with terminal based applications like
165 the PyGTK to integrate with terminal based applications like
138 IPython.
166 IPython.
139
167
140 Once this has been called, you can simple create PyGTK objects and
168 Once this has been called, you can simple create PyGTK objects and
141 use them. But, *don't start the event loop*. That is handled
169 use them. But, *don't start the event loop*. That is handled
142 automatically by PyOS_InputHook.
170 automatically by PyOS_InputHook.
143 """
171 """
144 import gtk
172 import gtk
145 try:
173 try:
146 gtk.set_interactive(True)
174 gtk.set_interactive(True)
175 self._current_gui = 'gtk'
147 except AttributeError:
176 except AttributeError:
148 # For older versions of gtk, use our own ctypes version
177 # For older versions of gtk, use our own ctypes version
149 from IPython.lib.inputhookgtk import inputhook_gtk
178 from IPython.lib.inputhookgtk import inputhook_gtk
150 add_inputhook(inputhook_gtk)
179 add_inputhook(inputhook_gtk)
151
180
152 def disable_gtk(self):
181 def disable_gtk(self):
153 """Disable event loop integration with PyGTK.
182 """Disable event loop integration with PyGTK.
154
183
155 This merely sets PyOS_InputHook to NULL.
184 This merely sets PyOS_InputHook to NULL.
156 """
185 """
157 self.clear_inputhook()
186 self.clear_inputhook()
158
187
159 def enable_tk(self, app=False):
188 def enable_tk(self, app=False):
160 # Creating a Tkinter.Tk object sets PyOS_InputHook()
189 """Enable event loop integration with Tk.
161 pass
190
191 Parameters
192 ----------
193 app : bool
194 Create a running application object or not.
195
196 Notes
197 -----
198 Currently this is a no-op as creating a :class:`Tkinter.Tk` object
199 sets ``PyOS_InputHook``.
200 """
201 self._current_gui = 'tk'
162
202
163 def disable_tk(self):
203 def disable_tk(self):
164 """Disable event loop integration with Tkinter.
204 """Disable event loop integration with Tkinter.
165
205
166 This merely sets PyOS_InputHook to NULL.
206 This merely sets PyOS_InputHook to NULL.
167 """
207 """
168 self.clear_inputhook()
208 self.clear_inputhook()
169
209
210 def current_gui(self):
211 """Return a string indicating the currently active GUI or None."""
212 return self._current_gui
213
170 inputhook_manager = InputHookManager()
214 inputhook_manager = InputHookManager()
171
215
172 enable_wx = inputhook_manager.enable_wx
216 enable_wx = inputhook_manager.enable_wx
173 disable_wx = inputhook_manager.disable_wx
217 disable_wx = inputhook_manager.disable_wx
174 enable_qt4 = inputhook_manager.enable_qt4
218 enable_qt4 = inputhook_manager.enable_qt4
175 disable_qt4 = inputhook_manager.disable_qt4
219 disable_qt4 = inputhook_manager.disable_qt4
176 enable_gtk = inputhook_manager.enable_gtk
220 enable_gtk = inputhook_manager.enable_gtk
177 disable_gtk = inputhook_manager.disable_gtk
221 disable_gtk = inputhook_manager.disable_gtk
178 enable_tk = inputhook_manager.enable_tk
222 enable_tk = inputhook_manager.enable_tk
179 disable_tk = inputhook_manager.disable_tk
223 disable_tk = inputhook_manager.disable_tk
180 clear_inputhook = inputhook_manager.clear_inputhook
224 clear_inputhook = inputhook_manager.clear_inputhook
181 set_inputhook = inputhook_manager.set_inputhook
225 set_inputhook = inputhook_manager.set_inputhook
226 current_gui = inputhook_manager.current_gui No newline at end of file
@@ -1,34 +1,36 b''
1 #!/usr/bin/env python
1 #!/usr/bin/env python
2 """Script to auto-generate our API docs.
2 """Script to auto-generate our API docs.
3 """
3 """
4 # stdlib imports
4 # stdlib imports
5 import os
5 import os
6 import sys
6 import sys
7
7
8 # local imports
8 # local imports
9 sys.path.append(os.path.abspath('sphinxext'))
9 sys.path.append(os.path.abspath('sphinxext'))
10 from apigen import ApiDocWriter
10 from apigen import ApiDocWriter
11
11
12 #*****************************************************************************
12 #*****************************************************************************
13 if __name__ == '__main__':
13 if __name__ == '__main__':
14 pjoin = os.path.join
14 pjoin = os.path.join
15 package = 'IPython'
15 package = 'IPython'
16 outdir = pjoin('source','api','generated')
16 outdir = pjoin('source','api','generated')
17 docwriter = ApiDocWriter(package,rst_extension='.txt')
17 docwriter = ApiDocWriter(package,rst_extension='.txt')
18 docwriter.package_skip_patterns += [r'\.fixes$',
18 docwriter.package_skip_patterns += [r'\.fixes$',
19 r'\.externals$',
19 r'\.externals$',
20 r'\.extensions',
20 r'\.extensions',
21 r'\.kernel.config',
21 r'\.kernel.config',
22 r'\.attic',
22 r'\.attic',
23 r'\.quarantine',
24 r'\.deathrow'
23 ]
25 ]
24 docwriter.module_skip_patterns += [ r'\.FakeModule',
26 docwriter.module_skip_patterns += [ r'\.core.fakemodule',
25 r'\.cocoa',
27 r'\.cocoa',
26 r'\.ipdoctest',
28 r'\.ipdoctest',
27 r'\.Gnuplot',
29 r'\.Gnuplot',
28 r'\.frontend.process.winprocess',
30 r'\.frontend.process.winprocess',
29 ]
31 ]
30 docwriter.write_api_docs(outdir)
32 docwriter.write_api_docs(outdir)
31 docwriter.write_index(outdir, 'gen',
33 docwriter.write_index(outdir, 'gen',
32 relative_to = pjoin('source','api')
34 relative_to = pjoin('source','api')
33 )
35 )
34 print '%d files written' % len(docwriter.written_modules)
36 print '%d files written' % len(docwriter.written_modules)
@@ -1,515 +1,517 b''
1 .. _development:
1 .. _development:
2
2
3 ==============================
3 ==============================
4 IPython development guidelines
4 IPython development guidelines
5 ==============================
5 ==============================
6
6
7
7
8 Overview
8 Overview
9 ========
9 ========
10
10
11 This document describes IPython from the perspective of developers. Most
11 This document describes IPython from the perspective of developers. Most
12 importantly, it gives information for people who want to contribute to the
12 importantly, it gives information for people who want to contribute to the
13 development of IPython. So if you want to help out, read on!
13 development of IPython. So if you want to help out, read on!
14
14
15 How to contribute to IPython
15 How to contribute to IPython
16 ============================
16 ============================
17
17
18 IPython development is done using Bazaar [Bazaar]_ and Launchpad [Launchpad]_.
18 IPython development is done using Bazaar [Bazaar]_ and Launchpad [Launchpad]_.
19 This makes it easy for people to contribute to the development of IPython.
19 This makes it easy for people to contribute to the development of IPython.
20 There are several ways in which you can join in.
20 There are several ways in which you can join in.
21
21
22 If you have a small change that you want to send to the team, you can edit your
22 If you have a small change that you want to send to the team, you can edit your
23 bazaar checkout of IPython (see below) in-place, and ask bazaar for the
23 bazaar checkout of IPython (see below) in-place, and ask bazaar for the
24 differences::
24 differences::
25
25
26 $ cd /path/to/your/copy/of/ipython
26 $ cd /path/to/your/copy/of/ipython
27 $ bzr diff > my_fixes.diff
27 $ bzr diff > my_fixes.diff
28
28
29 This produces a patch file with your fixes, which we can apply to the source
29 This produces a patch file with your fixes, which we can apply to the source
30 tree. This file should then be attached to a ticket in our `bug tracker
30 tree. This file should then be attached to a ticket in our `bug tracker
31 <https://bugs.launchpad.net/ipython>`_, indicating what it does.
31 <https://bugs.launchpad.net/ipython>`_, indicating what it does.
32
32
33 This model of creating small, self-contained patches works very well and there
33 This model of creating small, self-contained patches works very well and there
34 are open source projects that do their entire development this way. However,
34 are open source projects that do their entire development this way. However,
35 in IPython we have found that for tracking larger changes, making use of
35 in IPython we have found that for tracking larger changes, making use of
36 bazaar's full capabilities in conjunction with Launchpad's code hosting
36 bazaar's full capabilities in conjunction with Launchpad's code hosting
37 services makes for a much better experience.
37 services makes for a much better experience.
38
38
39 Making your own branch of IPython allows you to refine your changes over time,
39 Making your own branch of IPython allows you to refine your changes over time,
40 track the development of the main team, and propose your own full version of
40 track the development of the main team, and propose your own full version of
41 the code for others to use and review, with a minimum amount of fuss. The next
41 the code for others to use and review, with a minimum amount of fuss. The next
42 parts of this document will explain how to do this.
42 parts of this document will explain how to do this.
43
43
44 Install Bazaar and create a Launchpad account
44 Install Bazaar and create a Launchpad account
45 ---------------------------------------------
45 ---------------------------------------------
46
46
47 First make sure you have installed Bazaar (see their `website
47 First make sure you have installed Bazaar (see their `website
48 <http://bazaar-vcs.org/>`_). To see that Bazaar is installed and knows about
48 <http://bazaar-vcs.org/>`_). To see that Bazaar is installed and knows about
49 you, try the following::
49 you, try the following::
50
50
51 $ bzr whoami
51 $ bzr whoami
52 Joe Coder <jcoder@gmail.com>
52 Joe Coder <jcoder@gmail.com>
53
53
54 This should display your name and email. Next, you will want to create an
54 This should display your name and email. Next, you will want to create an
55 account on the `Launchpad website <http://www.launchpad.net>`_ and setup your
55 account on the `Launchpad website <http://www.launchpad.net>`_ and setup your
56 ssh keys. For more information of setting up your ssh keys, see `this link
56 ssh keys. For more information of setting up your ssh keys, see `this link
57 <https://help.launchpad.net/YourAccount/CreatingAnSSHKeyPair>`_.
57 <https://help.launchpad.net/YourAccount/CreatingAnSSHKeyPair>`_.
58
58
59 Get the main IPython branch from Launchpad
59 Get the main IPython branch from Launchpad
60 ------------------------------------------
60 ------------------------------------------
61
61
62 Now, you can get a copy of the main IPython development branch (we call this
62 Now, you can get a copy of the main IPython development branch (we call this
63 the "trunk")::
63 the "trunk")::
64
64
65 $ bzr branch lp:ipython
65 $ bzr branch lp:ipython
66
66
67 Create a working branch
67 Create a working branch
68 -----------------------
68 -----------------------
69
69
70 When working on IPython, you won't actually make edits directly to the
70 When working on IPython, you won't actually make edits directly to the
71 :file:`lp:ipython` branch. Instead, you will create a separate branch for your
71 :file:`lp:ipython` branch. Instead, you will create a separate branch for your
72 changes. For now, let's assume you want to do your work in a branch named
72 changes. For now, let's assume you want to do your work in a branch named
73 "ipython-mybranch". Create this branch by doing::
73 "ipython-mybranch". Create this branch by doing::
74
74
75 $ bzr branch ipython ipython-mybranch
75 $ bzr branch ipython ipython-mybranch
76
76
77 When you actually create a branch, you will want to give it a name that
77 When you actually create a branch, you will want to give it a name that
78 reflects the nature of the work that you will be doing in it, like
78 reflects the nature of the work that you will be doing in it, like
79 "install-docs-update".
79 "install-docs-update".
80
80
81 Make edits in your working branch
81 Make edits in your working branch
82 ---------------------------------
82 ---------------------------------
83
83
84 Now you are ready to actually make edits in your :file:`ipython-mybranch`
84 Now you are ready to actually make edits in your :file:`ipython-mybranch`
85 branch. Before doing this, it is helpful to install this branch so you can
85 branch. Before doing this, it is helpful to install this branch so you can
86 test your changes as you work. This is easiest if you have setuptools
86 test your changes as you work. This is easiest if you have setuptools
87 installed. Then, just do::
87 installed. Then, just do::
88
88
89 $ cd ipython-mybranch
89 $ cd ipython-mybranch
90 $ python setupegg.py develop
90 $ python setupegg.py develop
91
91
92 Now, make some changes. After a while, you will want to commit your changes.
92 Now, make some changes. After a while, you will want to commit your changes.
93 This let's Bazaar know that you like the changes you have made and gives you
93 This let's Bazaar know that you like the changes you have made and gives you
94 an opportunity to keep a nice record of what you have done. This looks like
94 an opportunity to keep a nice record of what you have done. This looks like
95 this::
95 this::
96
96
97 $ ...do work in ipython-mybranch...
97 $ ...do work in ipython-mybranch...
98 $ bzr commit -m "the commit message goes here"
98 $ bzr commit -m "the commit message goes here"
99
99
100 Please note that since we now don't use an old-style linear ChangeLog (that
100 Please note that since we now don't use an old-style linear ChangeLog (that
101 tends to cause problems with distributed version control systems), you should
101 tends to cause problems with distributed version control systems), you should
102 ensure that your log messages are reasonably detailed. Use a docstring-like
102 ensure that your log messages are reasonably detailed. Use a docstring-like
103 approach in the commit messages (including the second line being left
103 approach in the commit messages (including the second line being left
104 *blank*)::
104 *blank*)::
105
105
106 Single line summary of changes being committed.
106 Single line summary of changes being committed.
107
107
108 * more details when warranted ...
108 * more details when warranted ...
109 * including crediting outside contributors if they sent the
109 * including crediting outside contributors if they sent the
110 code/bug/idea!
110 code/bug/idea!
111
111
112 As you work, you will repeat this edit/commit cycle many times. If you work on
112 As you work, you will repeat this edit/commit cycle many times. If you work on
113 your branch for a long time, you will also want to get the latest changes from
113 your branch for a long time, you will also want to get the latest changes from
114 the :file:`lp:ipython` branch. This can be done with the following sequence of
114 the :file:`lp:ipython` branch. This can be done with the following sequence of
115 commands::
115 commands::
116
116
117 $ ls
117 $ ls
118 ipython
118 ipython
119 ipython-mybranch
119 ipython-mybranch
120
120
121 $ cd ipython
121 $ cd ipython
122 $ bzr pull
122 $ bzr pull
123 $ cd ../ipython-mybranch
123 $ cd ../ipython-mybranch
124 $ bzr merge ../ipython
124 $ bzr merge ../ipython
125 $ bzr commit -m "Merging changes from trunk"
125 $ bzr commit -m "Merging changes from trunk"
126
126
127 Along the way, you should also run the IPython test suite. You can do this
127 Along the way, you should also run the IPython test suite. You can do this
128 using the :command:`iptest` command (which is basically a customized version of
128 using the :command:`iptest` command (which is basically a customized version of
129 :command:`nosetests`)::
129 :command:`nosetests`)::
130
130
131 $ cd
131 $ cd
132 $ iptest
132 $ iptest
133
133
134 The :command:`iptest` command will also pick up and run any tests you have
134 The :command:`iptest` command will also pick up and run any tests you have
135 written. See :ref:`_devel_testing` for further details on the testing system.
135 written. See :ref:`testing documentation <devel_testing>` for further details
136 on the testing system.
136
137
137
138
138 Post your branch and request a code review
139 Post your branch and request a code review
139 ------------------------------------------
140 ------------------------------------------
140
141
141 Once you are done with your edits, you should post your branch on Launchpad so
142 Once you are done with your edits, you should post your branch on Launchpad so
142 that other IPython developers can review the changes and help you merge your
143 that other IPython developers can review the changes and help you merge your
143 changes into the main development branch. To post your branch on Launchpad,
144 changes into the main development branch. To post your branch on Launchpad,
144 do::
145 do::
145
146
146 $ cd ipython-mybranch
147 $ cd ipython-mybranch
147 $ bzr push lp:~yourusername/ipython/ipython-mybranch
148 $ bzr push lp:~yourusername/ipython/ipython-mybranch
148
149
149 Then, go to the `IPython Launchpad site <www.launchpad.net/ipython>`_, and you
150 Then, go to the `IPython Launchpad site <www.launchpad.net/ipython>`_, and you
150 should see your branch under the "Code" tab. If you click on your branch, you
151 should see your branch under the "Code" tab. If you click on your branch, you
151 can provide a short description of the branch as well as mark its status. Most
152 can provide a short description of the branch as well as mark its status. Most
152 importantly, you should click the link that reads "Propose for merging into
153 importantly, you should click the link that reads "Propose for merging into
153 another branch". What does this do?
154 another branch". What does this do?
154
155
155 This let's the other IPython developers know that your branch is ready to be
156 This let's the other IPython developers know that your branch is ready to be
156 reviewed and merged into the main development branch. During this review
157 reviewed and merged into the main development branch. During this review
157 process, other developers will give you feedback and help you get your code
158 process, other developers will give you feedback and help you get your code
158 ready to be merged. What types of things will we be looking for:
159 ready to be merged. What types of things will we be looking for:
159
160
160 * All code is documented.
161 * All code is documented.
161 * All code has tests.
162 * All code has tests.
162 * The entire IPython test suite passes.
163 * The entire IPython test suite passes.
163
164
164 Once your changes have been reviewed and approved, someone will merge them
165 Once your changes have been reviewed and approved, someone will merge them
165 into the main development branch.
166 into the main development branch.
166
167
167
168
168 Some notes for core developers when merging third-party contributions
169 Some notes for core developers when merging third-party contributions
169 =====================================================================
170 =====================================================================
170
171
171 Core developers, who ultimately merge any approved branch (from themselves,
172 Core developers, who ultimately merge any approved branch (from themselves,
172 another developer, or any third-party contribution) will typically use
173 another developer, or any third-party contribution) will typically use
173 :command:`bzr merge` to merge the branch into the trunk and push it to the main
174 :command:`bzr merge` to merge the branch into the trunk and push it to the
174 Launcphad site. This is a short list of things to keep in mind when doing this
175 main Launcphad site. This is a short list of things to keep in mind when doing
175 process, so that the project history is easy to understand in the long run, and
176 this process, so that the project history is easy to understand in the long
176 that generating release notes is as painless and accurate as possible.
177 run, and that generating release notes is as painless and accurate as
177
178 possible.
178 - When you merge any non-trivial functionality (from one small bug fix to a big
179
179 feature branch), please remember to always edit the changes_ file
180 - When you merge any non-trivial functionality (from one small bug fix to a
180 accordingly. This file has one main section for each release, and if you
181 big feature branch), please remember to always edit the :file:`changes.txt`
181 edit it as you go, noting what new features, bug fixes or API changes you
182 file accordingly. This file has one main section for each release, and if
182 have made, the release notes will be almost finished when they are needed
183 you edit it as you go, noting what new features, bug fixes or API changes
183 later. This is much easier if done when you merge the work, rather than
184 you have made, the release notes will be almost finished when they are
184 weeks or months later by re-reading a massive Bazaar log.
185 needed later. This is much easier if done when you merge the work, rather
185
186 than weeks or months later by re-reading a massive Bazaar log.
186 - When big merges are done, the practice of putting a summary commit message in
187
187 the merge is *extremely* useful. It makes this kind of job much nicer,
188 - When big merges are done, the practice of putting a summary commit message
189 in the merge is *extremely* useful. It makes this kind of job much nicer,
188 because that summary log message can be almost copy/pasted without changes,
190 because that summary log message can be almost copy/pasted without changes,
189 if it was well written, rather than dissecting the next-level messages from
191 if it was well written, rather than dissecting the next-level messages from
190 the individual commits.
192 the individual commits.
191
193
192 - It's important that we remember to always credit who gave us something if
194 - It's important that we remember to always credit who gave us something if
193 it's not the committer. In general, we have been fairly good on this front,
195 it's not the committer. In general, we have been fairly good on this front,
194 this is just a reminder to keep things up. As a note, if you are ever
196 this is just a reminder to keep things up. As a note, if you are ever
195 committing something that is completely (or almost so) a third-party
197 committing something that is completely (or almost so) a third-party
196 contribution, do the commit as::
198 contribution, do the commit as::
197
199
198 $ bzr commit --author="Someone Else"
200 $ bzr commit --author="Someone Else"
199
201
200 This way it will show that name separately in the log, which makes it even
202 This way it will show that name separately in the log, which makes it even
201 easier to spot. Obviously we often rework third party contributions
203 easier to spot. Obviously we often rework third party contributions
202 extensively, but this is still good to keep in mind for cases when we don't
204 extensively, but this is still good to keep in mind for cases when we don't
203 touch the code too much.
205 touch the code too much.
204
206
205
207
206 Documentation
208 Documentation
207 =============
209 =============
208
210
209 Standalone documentation
211 Standalone documentation
210 ------------------------
212 ------------------------
211
213
212 All standalone documentation should be written in plain text (``.txt``) files
214 All standalone documentation should be written in plain text (``.txt``) files
213 using reStructuredText [reStructuredText]_ for markup and formatting. All such
215 using reStructuredText [reStructuredText]_ for markup and formatting. All such
214 documentation should be placed in directory :file:`docs/source` of the IPython
216 documentation should be placed in directory :file:`docs/source` of the IPython
215 source tree. The documentation in this location will serve as the main source
217 source tree. The documentation in this location will serve as the main source
216 for IPython documentation and all existing documentation should be converted
218 for IPython documentation and all existing documentation should be converted
217 to this format.
219 to this format.
218
220
219 To build the final documentation, we use Sphinx [Sphinx]_. Once you have
221 To build the final documentation, we use Sphinx [Sphinx]_. Once you have
220 Sphinx installed, you can build the html docs yourself by doing::
222 Sphinx installed, you can build the html docs yourself by doing::
221
223
222 $ cd ipython-mybranch/docs
224 $ cd ipython-mybranch/docs
223 $ make html
225 $ make html
224
226
225 Docstring format
227 Docstring format
226 ----------------
228 ----------------
227
229
228 Good docstrings are very important. All new code should have docstrings that
230 Good docstrings are very important. All new code should have docstrings that
229 are formatted using reStructuredText for markup and formatting, since it is
231 are formatted using reStructuredText for markup and formatting, since it is
230 understood by a wide variety of tools. Details about using reStructuredText
232 understood by a wide variety of tools. Details about using reStructuredText
231 for docstrings can be found `here
233 for docstrings can be found `here
232 <http://epydoc.sourceforge.net/manual-othermarkup.html>`_.
234 <http://epydoc.sourceforge.net/manual-othermarkup.html>`_.
233
235
234 Additional PEPs of interest regarding documentation of code:
236 Additional PEPs of interest regarding documentation of code:
235
237
236 * `Docstring Conventions <http://www.python.org/peps/pep-0257.html>`_
238 * `Docstring Conventions <http://www.python.org/peps/pep-0257.html>`_
237 * `Docstring Processing System Framework <http://www.python.org/peps/pep-0256.html>`_
239 * `Docstring Processing System Framework <http://www.python.org/peps/pep-0256.html>`_
238 * `Docutils Design Specification <http://www.python.org/peps/pep-0258.html>`_
240 * `Docutils Design Specification <http://www.python.org/peps/pep-0258.html>`_
239
241
240
242
241 Coding conventions
243 Coding conventions
242 ==================
244 ==================
243
245
244 General
246 General
245 -------
247 -------
246
248
247 In general, we'll try to follow the standard Python style conventions as
249 In general, we'll try to follow the standard Python style conventions as
248 described here:
250 described here:
249
251
250 * `Style Guide for Python Code <http://www.python.org/peps/pep-0008.html>`_
252 * `Style Guide for Python Code <http://www.python.org/peps/pep-0008.html>`_
251
253
252
254
253 Other comments:
255 Other comments:
254
256
255 * In a large file, top level classes and functions should be
257 * In a large file, top level classes and functions should be
256 separated by 2-3 lines to make it easier to separate them visually.
258 separated by 2-3 lines to make it easier to separate them visually.
257 * Use 4 spaces for indentation.
259 * Use 4 spaces for indentation.
258 * Keep the ordering of methods the same in classes that have the same
260 * Keep the ordering of methods the same in classes that have the same
259 methods. This is particularly true for classes that implement an interface.
261 methods. This is particularly true for classes that implement an interface.
260
262
261 Naming conventions
263 Naming conventions
262 ------------------
264 ------------------
263
265
264 In terms of naming conventions, we'll follow the guidelines from the `Style
266 In terms of naming conventions, we'll follow the guidelines from the `Style
265 Guide for Python Code`_.
267 Guide for Python Code`_.
266
268
267 For all new IPython code (and much existing code is being refactored), we'll
269 For all new IPython code (and much existing code is being refactored), we'll
268 use:
270 use:
269
271
270 * All ``lowercase`` module names.
272 * All ``lowercase`` module names.
271
273
272 * ``CamelCase`` for class names.
274 * ``CamelCase`` for class names.
273
275
274 * ``lowercase_with_underscores`` for methods, functions, variables and
276 * ``lowercase_with_underscores`` for methods, functions, variables and
275 attributes.
277 attributes.
276
278
277 There are, however, some important exceptions to these rules. In some cases,
279 There are, however, some important exceptions to these rules. In some cases,
278 IPython code will interface with packages (Twisted, Wx, Qt) that use other
280 IPython code will interface with packages (Twisted, Wx, Qt) that use other
279 conventions. At some level this makes it impossible to adhere to our own
281 conventions. At some level this makes it impossible to adhere to our own
280 standards at all times. In particular, when subclassing classes that use other
282 standards at all times. In particular, when subclassing classes that use other
281 naming conventions, you must follow their naming conventions. To deal with
283 naming conventions, you must follow their naming conventions. To deal with
282 cases like this, we propose the following policy:
284 cases like this, we propose the following policy:
283
285
284 * If you are subclassing a class that uses different conventions, use its
286 * If you are subclassing a class that uses different conventions, use its
285 naming conventions throughout your subclass. Thus, if you are creating a
287 naming conventions throughout your subclass. Thus, if you are creating a
286 Twisted Protocol class, used Twisted's
288 Twisted Protocol class, used Twisted's
287 ``namingSchemeForMethodsAndAttributes.``
289 ``namingSchemeForMethodsAndAttributes.``
288
290
289 * All IPython's official interfaces should use our conventions. In some cases
291 * All IPython's official interfaces should use our conventions. In some cases
290 this will mean that you need to provide shadow names (first implement
292 this will mean that you need to provide shadow names (first implement
291 ``fooBar`` and then ``foo_bar = fooBar``). We want to avoid this at all
293 ``fooBar`` and then ``foo_bar = fooBar``). We want to avoid this at all
292 costs, but it will probably be necessary at times. But, please use this
294 costs, but it will probably be necessary at times. But, please use this
293 sparingly!
295 sparingly!
294
296
295 Implementation-specific *private* methods will use
297 Implementation-specific *private* methods will use
296 ``_single_underscore_prefix``. Names with a leading double underscore will
298 ``_single_underscore_prefix``. Names with a leading double underscore will
297 *only* be used in special cases, as they makes subclassing difficult (such
299 *only* be used in special cases, as they makes subclassing difficult (such
298 names are not easily seen by child classes).
300 names are not easily seen by child classes).
299
301
300 Occasionally some run-in lowercase names are used, but mostly for very short
302 Occasionally some run-in lowercase names are used, but mostly for very short
301 names or where we are implementing methods very similar to existing ones in a
303 names or where we are implementing methods very similar to existing ones in a
302 base class (like ``runlines()`` where ``runsource()`` and ``runcode()`` had
304 base class (like ``runlines()`` where ``runsource()`` and ``runcode()`` had
303 established precedent).
305 established precedent).
304
306
305 The old IPython codebase has a big mix of classes and modules prefixed with an
307 The old IPython codebase has a big mix of classes and modules prefixed with an
306 explicit ``IP``. In Python this is mostly unnecessary, redundant and frowned
308 explicit ``IP``. In Python this is mostly unnecessary, redundant and frowned
307 upon, as namespaces offer cleaner prefixing. The only case where this approach
309 upon, as namespaces offer cleaner prefixing. The only case where this approach
308 is justified is for classes which are expected to be imported into external
310 is justified is for classes which are expected to be imported into external
309 namespaces and a very generic name (like Shell) is too likely to clash with
311 namespaces and a very generic name (like Shell) is too likely to clash with
310 something else. We'll need to revisit this issue as we clean up and refactor
312 something else. We'll need to revisit this issue as we clean up and refactor
311 the code, but in general we should remove as many unnecessary ``IP``/``ip``
313 the code, but in general we should remove as many unnecessary ``IP``/``ip``
312 prefixes as possible. However, if a prefix seems absolutely necessary the more
314 prefixes as possible. However, if a prefix seems absolutely necessary the more
313 specific ``IPY`` or ``ipy`` are preferred.
315 specific ``IPY`` or ``ipy`` are preferred.
314
316
315 .. _devel_testing:
317 .. _devel_testing:
316
318
317 Testing system
319 Testing system
318 ==============
320 ==============
319
321
320 It is extremely important that all code contributed to IPython has tests.
322 It is extremely important that all code contributed to IPython has tests.
321 Tests should be written as unittests, doctests or as entities that the Nose
323 Tests should be written as unittests, doctests or as entities that the Nose
322 [Nose]_ testing package will find. Regardless of how the tests are written, we
324 [Nose]_ testing package will find. Regardless of how the tests are written, we
323 will use Nose for discovering and running the tests. Nose will be required to
325 will use Nose for discovering and running the tests. Nose will be required to
324 run the IPython test suite, but will not be required to simply use IPython.
326 run the IPython test suite, but will not be required to simply use IPython.
325
327
326 Tests of Twisted using code need to follow two additional guidelines:
328 Tests of Twisted using code need to follow two additional guidelines:
327
329
328 1. Twisted using tests should be written by subclassing the :class:`TestCase`
330 1. Twisted using tests should be written by subclassing the :class:`TestCase`
329 class that comes with :mod:`twisted.trial.unittest`.
331 class that comes with :mod:`twisted.trial.unittest`.
330
332
331 2. All :class:`Deferred` instances that are created in the test must be
333 2. All :class:`Deferred` instances that are created in the test must be
332 properly chained and the final one *must* be the return value of the test
334 properly chained and the final one *must* be the return value of the test
333 method.
335 method.
334
336
335 When these two things are done, Nose will be able to run the tests and the
337 When these two things are done, Nose will be able to run the tests and the
336 twisted reactor will be handled correctly.
338 twisted reactor will be handled correctly.
337
339
338 Each subpackage in IPython should have its own :file:`tests` directory that
340 Each subpackage in IPython should have its own :file:`tests` directory that
339 contains all of the tests for that subpackage. This allows each subpackage to
341 contains all of the tests for that subpackage. This allows each subpackage to
340 be self-contained. A good convention to follow is to have a file named
342 be self-contained. A good convention to follow is to have a file named
341 :file:`test_foo.py` for each module :file:`foo.py` in the package. This makes
343 :file:`test_foo.py` for each module :file:`foo.py` in the package. This makes
342 it easy to organize the tests, though like most conventions, it's OK to break
344 it easy to organize the tests, though like most conventions, it's OK to break
343 it if logic and common sense dictate otherwise.
345 it if logic and common sense dictate otherwise.
344
346
345 If a subpackage has any dependencies beyond the Python standard library, the
347 If a subpackage has any dependencies beyond the Python standard library, the
346 tests for that subpackage should be skipped if the dependencies are not
348 tests for that subpackage should be skipped if the dependencies are not
347 found. This is very important so users don't get tests failing simply because
349 found. This is very important so users don't get tests failing simply because
348 they don't have dependencies. We ship a set of decorators in the
350 they don't have dependencies. We ship a set of decorators in the
349 :mod:`IPython.testing` package to tag tests that may be platform-specific or
351 :mod:`IPython.testing` package to tag tests that may be platform-specific or
350 otherwise may have restrictions; if the existing ones don't fit your needs, add
352 otherwise may have restrictions; if the existing ones don't fit your needs, add
351 a new decorator in that location so other tests can reuse it.
353 a new decorator in that location so other tests can reuse it.
352
354
353 To run the IPython test suite, use the :command:`iptest` command that is
355 To run the IPython test suite, use the :command:`iptest` command that is
354 installed with IPython (if you are using IPython in-place, without installing
356 installed with IPython (if you are using IPython in-place, without installing
355 it, you can find this script in the :file:`scripts` directory)::
357 it, you can find this script in the :file:`scripts` directory)::
356
358
357 $ iptest
359 $ iptest
358
360
359 This command colects all IPython tests into separate groups, and then calls
361 This command colects all IPython tests into separate groups, and then calls
360 either Nose with the proper options and extensions, or Twisted's
362 either Nose with the proper options and extensions, or Twisted's
361 :command:`trial`. This ensures that tests that need the Twisted reactor
363 :command:`trial`. This ensures that tests that need the Twisted reactor
362 management facilities execute separate of Nose. If any individual test group
364 management facilities execute separate of Nose. If any individual test group
363 fails, :command:`iptest` will print what you need to type so you can rerun that
365 fails, :command:`iptest` will print what you need to type so you can rerun that
364 particular test group alone for debugging.
366 particular test group alone for debugging.
365
367
366 By default, :command:`iptest` runs the entire IPython test
368 By default, :command:`iptest` runs the entire IPython test
367 suite (skipping tests that may be platform-specific or which depend on tools
369 suite (skipping tests that may be platform-specific or which depend on tools
368 you may not have). But you can also use it to run only one specific test file,
370 you may not have). But you can also use it to run only one specific test file,
369 or a specific test function. For example, this will run only the
371 or a specific test function. For example, this will run only the
370 :file:`test_magic` file from the test suite::
372 :file:`test_magic` file from the test suite::
371
373
372 $ iptest IPython.tests.test_magic
374 $ iptest IPython.tests.test_magic
373 ----------------------------------------------------------------------
375 ----------------------------------------------------------------------
374 Ran 10 tests in 0.348s
376 Ran 10 tests in 0.348s
375
377
376 OK (SKIP=3)
378 OK (SKIP=3)
377 Deleting object: second_pass
379 Deleting object: second_pass
378
380
379 while the ``path:function`` syntax allows you to select a specific function in
381 while the ``path:function`` syntax allows you to select a specific function in
380 that file to run::
382 that file to run::
381
383
382 $ iptest IPython.tests.test_magic:test_obj_del
384 $ iptest IPython.tests.test_magic:test_obj_del
383 ----------------------------------------------------------------------
385 ----------------------------------------------------------------------
384 Ran 1 test in 0.204s
386 Ran 1 test in 0.204s
385
387
386 OK
388 OK
387
389
388 Since :command:`iptest` is based on nosetests, you can pass it any regular
390 Since :command:`iptest` is based on nosetests, you can pass it any regular
389 nosetests option. For example, you can use ``--pdb`` or ``--pdb-failures`` to
391 nosetests option. For example, you can use ``--pdb`` or ``--pdb-failures`` to
390 automatically activate the interactive Pdb debugger on errors or failures. See
392 automatically activate the interactive Pdb debugger on errors or failures. See
391 the nosetests documentation for further details.
393 the nosetests documentation for further details.
392
394
393
395
394 A few tips for writing tests
396 A few tips for writing tests
395 ----------------------------
397 ----------------------------
396
398
397 You can write tests either as normal test files, using all the conventions that
399 You can write tests either as normal test files, using all the conventions that
398 Nose recognizes, or as doctests. Note that *all* IPython functions should have
400 Nose recognizes, or as doctests. Note that *all* IPython functions should have
399 at least one example that serves as a doctest, whenever technically feasible.
401 at least one example that serves as a doctest, whenever technically feasible.
400 However, example doctests should only be in the main docstring if they are *a
402 However, example doctests should only be in the main docstring if they are *a
401 good example*, i.e. if they convey useful information about the function. If
403 good example*, i.e. if they convey useful information about the function. If
402 you simply would like to write a test as a doctest, put it in a separate test
404 you simply would like to write a test as a doctest, put it in a separate test
403 file and write a no-op function whose only purpose is its docstring.
405 file and write a no-op function whose only purpose is its docstring.
404
406
405 Note, however, that in a file named :file:`test_X`, functions whose only test
407 Note, however, that in a file named :file:`test_X`, functions whose only test
406 is their docstring (as a doctest) and which have no test functionality of their
408 is their docstring (as a doctest) and which have no test functionality of their
407 own, should be called *doctest_foo* instead of *test_foo*, otherwise they get
409 own, should be called *doctest_foo* instead of *test_foo*, otherwise they get
408 double-counted (the empty function call is counted as a test, which just
410 double-counted (the empty function call is counted as a test, which just
409 inflates tests numbers artificially). This restriction does not apply to
411 inflates tests numbers artificially). This restriction does not apply to
410 functions in files with other names, due to how Nose discovers tests.
412 functions in files with other names, due to how Nose discovers tests.
411
413
412 You can use IPython examples in your docstrings. Those can make full use of
414 You can use IPython examples in your docstrings. Those can make full use of
413 IPython functionality (magics, variable substitution, etc), but be careful to
415 IPython functionality (magics, variable substitution, etc), but be careful to
414 keep them generic enough that they run identically on all Operating Systems.
416 keep them generic enough that they run identically on all Operating Systems.
415
417
416 The prompts in your doctests can be either of the plain Python ``>>>`` variety
418 The prompts in your doctests can be either of the plain Python ``>>>`` variety
417 or ``In [1]:`` IPython style. Since this is the IPython system, after all, we
419 or ``In [1]:`` IPython style. Since this is the IPython system, after all, we
418 encourage you to use IPython prompts throughout, unless you are illustrating a
420 encourage you to use IPython prompts throughout, unless you are illustrating a
419 specific aspect of the normal prompts (such as the ``%doctest_mode`` magic).
421 specific aspect of the normal prompts (such as the ``%doctest_mode`` magic).
420
422
421 If a test isn't safe to run inside the main nose process (e.g. because it loads
423 If a test isn't safe to run inside the main nose process (e.g. because it loads
422 a GUI toolkit), consider running it in a subprocess and capturing its output
424 a GUI toolkit), consider running it in a subprocess and capturing its output
423 for evaluation and test decision later. Here is an example of how to do it, by
425 for evaluation and test decision later. Here is an example of how to do it, by
424 relying on the builtin ``_ip`` object that contains the public IPython api as
426 relying on the builtin ``_ip`` object that contains the public IPython api as
425 defined in :mod:`IPython.ipapi`::
427 defined in :mod:`IPython.ipapi`::
426
428
427 def test_obj_del():
429 def test_obj_del():
428 """Test that object's __del__ methods are called on exit."""
430 """Test that object's __del__ methods are called on exit."""
429 test_dir = os.path.dirname(__file__)
431 test_dir = os.path.dirname(__file__)
430 del_file = os.path.join(test_dir,'obj_del.py')
432 del_file = os.path.join(test_dir,'obj_del.py')
431 out = _ip.IP.getoutput('ipython %s' % del_file)
433 out = _ip.IP.getoutput('ipython %s' % del_file)
432 nt.assert_equals(out,'object A deleted')
434 nt.assert_equals(out,'object A deleted')
433
435
434
436
435
437
436 If a doctest contains input whose output you don't want to verify identically
438 If a doctest contains input whose output you don't want to verify identically
437 via doctest (random output, an object id, etc), you can mark a docstring with
439 via doctest (random output, an object id, etc), you can mark a docstring with
438 ``#random``. All of these test will have their code executed but no output
440 ``#random``. All of these test will have their code executed but no output
439 checking will be done::
441 checking will be done::
440
442
441 >>> 1+3
443 >>> 1+3
442 junk goes here... # random
444 junk goes here... # random
443
445
444 >>> 1+2
446 >>> 1+2
445 again, anything goes #random
447 again, anything goes #random
446 if multiline, the random mark is only needed once.
448 if multiline, the random mark is only needed once.
447
449
448 >>> 1+2
450 >>> 1+2
449 You can also put the random marker at the end:
451 You can also put the random marker at the end:
450 # random
452 # random
451
453
452 >>> 1+2
454 >>> 1+2
453 # random
455 # random
454 .. or at the beginning.
456 .. or at the beginning.
455
457
456 In a case where you want an *entire* docstring to be executed but not verified
458 In a case where you want an *entire* docstring to be executed but not verified
457 (this only serves to check that the code runs without crashing, so it should be
459 (this only serves to check that the code runs without crashing, so it should be
458 used very sparingly), you can put ``# all-random`` in the docstring.
460 used very sparingly), you can put ``# all-random`` in the docstring.
459
461
460 .. _devel_config:
462 .. _devel_config:
461
463
462 Release checklist
464 Release checklist
463 =================
465 =================
464
466
465 Most of the release process is automated by the :file:`release` script in the
467 Most of the release process is automated by the :file:`release` script in the
466 :file:`tools` directory. This is just a handy reminder for the release manager.
468 :file:`tools` directory. This is just a handy reminder for the release manager.
467
469
468 #. First, run :file:`build_release`, which does all the file checking and
470 #. First, run :file:`build_release`, which does all the file checking and
469 building that the real release script will do. This will let you do test
471 building that the real release script will do. This will let you do test
470 installations, check that the build procedure runs OK, etc. You may want to
472 installations, check that the build procedure runs OK, etc. You may want to
471 disable a few things like multi-version RPM building while testing, because
473 disable a few things like multi-version RPM building while testing, because
472 otherwise the build takes really long.
474 otherwise the build takes really long.
473
475
474 #. Run the release script, which makes the tar.gz, eggs and Win32 .exe
476 #. Run the release script, which makes the tar.gz, eggs and Win32 .exe
475 installer. It posts them to the site and registers the release with PyPI.
477 installer. It posts them to the site and registers the release with PyPI.
476
478
477 #. Updating the website with announcements and links to the updated
479 #. Updating the website with announcements and links to the updated
478 changes.txt in html form. Remember to put a short note both on the news
480 changes.txt in html form. Remember to put a short note both on the news
479 page of the site and on Launcphad.
481 page of the site and on Launcphad.
480
482
481 #. Drafting a short release announcement with i) highlights and ii) a link to
483 #. Drafting a short release announcement with i) highlights and ii) a link to
482 the html changes.txt.
484 the html changes.txt.
483
485
484 #. Make sure that the released version of the docs is live on the site.
486 #. Make sure that the released version of the docs is live on the site.
485
487
486 #. Celebrate!
488 #. Celebrate!
487
489
488 Porting to 3.0
490 Porting to 3.0
489 ==============
491 ==============
490
492
491 There are no definite plans for porting of IPython to python 3. The major
493 There are no definite plans for porting of IPython to python 3. The major
492 issue is the dependency on twisted framework for the networking/threading
494 issue is the dependency on twisted framework for the networking/threading
493 stuff. It is possible that it the traditional IPython interactive console
495 stuff. It is possible that it the traditional IPython interactive console
494 could be ported more easily since it has no such dependency. Here are a few
496 could be ported more easily since it has no such dependency. Here are a few
495 things that will need to be considered when doing such a port especially
497 things that will need to be considered when doing such a port especially
496 if we want to have a codebase that works directly on both 2.x and 3.x.
498 if we want to have a codebase that works directly on both 2.x and 3.x.
497
499
498 1. The syntax for exceptions changed (PEP 3110). The old
500 1. The syntax for exceptions changed (PEP 3110). The old
499 `except exc, var` changed to `except exc as var`. At last
501 `except exc, var` changed to `except exc as var`. At last
500 count there was 78 occurences of this usage in the codebase. This
502 count there was 78 occurences of this usage in the codebase. This
501 is a particularly problematic issue, because it's not easy to
503 is a particularly problematic issue, because it's not easy to
502 implement it in a 2.5-compatible way.
504 implement it in a 2.5-compatible way.
503
505
504 Because it is quite difficult to support simultaneously Python 2.5 and 3.x, we
506 Because it is quite difficult to support simultaneously Python 2.5 and 3.x, we
505 will likely at some point put out a release that requires strictly 2.6 and
507 will likely at some point put out a release that requires strictly 2.6 and
506 abandons 2.5 compatibility. This will then allow us to port the code to using
508 abandons 2.5 compatibility. This will then allow us to port the code to using
507 :func:`print` as a function, `except exc as var` syntax, etc. But as of
509 :func:`print` as a function, `except exc as var` syntax, etc. But as of
508 version 0.11 at least, we will retain Python 2.5 compatibility.
510 version 0.11 at least, we will retain Python 2.5 compatibility.
509
511
510
512
511 .. [Bazaar] Bazaar. http://bazaar-vcs.org/
513 .. [Bazaar] Bazaar. http://bazaar-vcs.org/
512 .. [Launchpad] Launchpad. http://www.launchpad.net/ipython
514 .. [Launchpad] Launchpad. http://www.launchpad.net/ipython
513 .. [reStructuredText] reStructuredText. http://docutils.sourceforge.net/rst.html
515 .. [reStructuredText] reStructuredText. http://docutils.sourceforge.net/rst.html
514 .. [Sphinx] Sphinx. http://sphinx.pocoo.org/
516 .. [Sphinx] Sphinx. http://sphinx.pocoo.org/
515 .. [Nose] Nose: a discovery based unittest extension. http://code.google.com/p/python-nose/
517 .. [Nose] Nose: a discovery based unittest extension. http://code.google.com/p/python-nose/
@@ -1,94 +1,84 b''
1 =============================
1 =============================
2 IPython module reorganization
2 IPython module reorganization
3 =============================
3 =============================
4
4
5 Currently, IPython has many top-level modules that serve many different
5 Currently, IPython has many top-level modules that serve many different
6 purposes. The lack of organization make it very difficult for developers to
6 purposes. The lack of organization make it very difficult for developers to
7 work on IPython and understand its design. This document contains notes about
7 work on IPython and understand its design. This document contains notes about
8 how we will reorganize the modules into sub-packages.
8 how we will reorganize the modules into sub-packages.
9
9
10 .. warning::
10 .. warning::
11
11
12 This effort will possibly break third party packages that use IPython as
12 This effort will possibly break third party packages that use IPython as
13 a library or hack on the IPython internals.
13 a library or hack on the IPython internals.
14
14
15 .. warning::
15 .. warning::
16
16
17 This effort will result in the removal from IPython of certain modules
17 This effort will result in the removal from IPython of certain modules
18 that are not used anymore, don't currently work, are unmaintained, etc.
18 that are not used anymore, don't currently work, are unmaintained, etc.
19
19
20
20
21 Current subpackges
21 Current subpackges
22 ==================
22 ==================
23
23
24 IPython currently has the following sub-packages:
24 IPython currently has the following sub-packages:
25
25
26 * :mod:`IPython.config`
26 * :mod:`IPython.config`
27
27
28 * :mod:`IPython.Extensions`
28 * :mod:`IPython.Extensions`
29
29
30 * :mod:`IPython.external`
30 * :mod:`IPython.external`
31
31
32 * :mod:`IPython.frontend`
32 * :mod:`IPython.frontend`
33
33
34 * :mod:`IPython.gui`
34 * :mod:`IPython.gui`
35
35
36 * :mod:`IPython.kernel`
36 * :mod:`IPython.kernel`
37
37
38 * :mod:`IPython.testing`
38 * :mod:`IPython.testing`
39
39
40 * :mod:`IPython.tests`
40 * :mod:`IPython.tests`
41
41
42 * :mod:`IPython.tools`
42 * :mod:`IPython.tools`
43
43
44 * :mod:`IPython.UserConfig`
44 * :mod:`IPython.UserConfig`
45
45
46 New Subpackages to be created
46 New Subpackages to be created
47 =============================
47 =============================
48
48
49 We propose to create the following new sub-packages:
49 We propose to create the following new sub-packages:
50
50
51 * :mod:`IPython.core`. This sub-package will contain the core of the IPython
51 * :mod:`IPython.core`. This sub-package will contain the core of the IPython
52 interpreter, but none of its extended capabilities.
52 interpreter, but none of its extended capabilities.
53
53
54 * :mod:`IPython.lib`. IPython has many extended capabilities that are not part
54 * :mod:`IPython.lib`. IPython has many extended capabilities that are not part
55 of the IPython core. These things will go here.
55 of the IPython core. These things will go here.
56
56
57 * :mod:`IPython.utils`. This sub-package will contain anything that might
57 * :mod:`IPython.utils`. This sub-package will contain anything that might
58 eventually be found in the Python standard library, like things in
58 eventually be found in the Python standard library, like things in
59 :mod:`genutils`. Each sub-module in this sub-package should contain
59 :mod:`genutils`. Each sub-module in this sub-package should contain
60 functions and classes that serve a single purpose.
60 functions and classes that serve a single purpose.
61
61
62 * :mod:`IPython.deathrow`. This is for code that is untested and/or rotting
62 * :mod:`IPython.deathrow`. This is for code that is untested and/or rotting
63 and needs to be removed from IPython. Eventually all this code will either
63 and needs to be removed from IPython. Eventually all this code will either
64 i) be revived by someone willing to maintain it with tests and docs and
64 i) be revived by someone willing to maintain it with tests and docs and
65 re-included into IPython or 2) be removed from IPython proper, but put into
65 re-included into IPython or 2) be removed from IPython proper, but put into
66 a separate top-level (not IPython) package that we keep around. No new code
66 a separate top-level (not IPython) package that we keep around. No new code
67 will be allowed here.
67 will be allowed here.
68
68
69 * :mod:`IPython.quarantine`. This is for code that doesn't meet IPython's
69 * :mod:`IPython.quarantine`. This is for code that doesn't meet IPython's
70 standards, but that we plan on keeping. To be moved out of this sub-package
70 standards, but that we plan on keeping. To be moved out of this sub-package
71 a module needs to have a maintainer, tests and documentation.
71 a module needs to have a maintainer, tests and documentation.
72
72
73 Procedure
73 Procedure
74 =========
74 =========
75
75
76 1. Move the file to its new location with its new name.
76 1. Move the file to its new location with its new name.
77 2. Rename all import statements to reflect the change.
77 2. Rename all import statements to reflect the change.
78 3. Run PyFlakes on each changes module.
78 3. Run PyFlakes on each changes module.
79 3. Add tests/test_imports.py to test it.
79 4. Add tests/test_imports.py to test it.
80
80
81 Status
81 Status
82 ======
82 ======
83
83
84 The new subpackages have been created and the top-level modules have been
84 This branch was merged into trunk in early August of 2009.
85 moved and renamed. Import tests have been created for all of the moved and
86 renamed modules. The build infrastructure (setup.py and friends) have been
87 updated and tested on Mac and Windows. Finally, a compatibility layer has been
88 added for iplib, ipapi and Shell. The follow things still need to be done::
89
90 * I need to modify iptests to properly skip modules that are no longer top
91 level modules.
92
93 * When running python setup.py sdist, the Sphinx API docs fail to build
94 because of something going on with IPython.core.fakemodule
@@ -1,81 +1,73 b''
1 .. _roadmap:
1 .. _roadmap:
2
2
3 ===================
3 ===================
4 Development roadmap
4 Development roadmap
5 ===================
5 ===================
6
6
7 IPython is an ambitious project that is still under heavy development. However, we want IPython to become useful to as many people as possible, as quickly as possible. To help us accomplish this, we are laying out a roadmap of where we are headed and what needs to happen to get there. Hopefully, this will help the IPython developers figure out the best things to work on for each upcoming release.
7 IPython is an ambitious project that is still under heavy development.
8 However, we want IPython to become useful to as many people as possible, as
9 quickly as possible. To help us accomplish this, we are laying out a roadmap
10 of where we are headed and what needs to happen to get there. Hopefully, this
11 will help the IPython developers figure out the best things to work on for
12 each upcoming release.
8
13
9 Work targeted to particular releases
14 Work targeted to particular releases
10 ====================================
15 ====================================
11
16
12 Release 0.10
13 ------------
14
15 * Initial refactor of :command:`ipcluster`.
16
17 * Better TextMate integration.
18
19 * Merge in the daemon branch.
20
21 Release 0.11
17 Release 0.11
22 ------------
18 ------------
23
19
24 * Refactor the configuration system and command line options for
20 * [DONE] Full module and package reorganization.
25 :command:`ipengine` and :command:`ipcontroller`. This will include the
21
26 creation of cluster directories that encapsulate all the configuration
22 * [DONE] Removal of the threaded shells and new implementation of GUI support
27 files, log files and security related files for a particular cluster.
23 based on ``PyOSInputHook``.
28
24
29 * Refactor :command:`ipcluster` to support the new configuration system.
25 * Refactor the configuration system.
30
26
31 * Refactor the daemon stuff to support the new configuration system.
27 * Prepare to refactor IPython's core by creating a new component and
28 application system.
32
29
33 * Merge back in the core of the notebook.
34
30
35 Release 0.12
31 Release 0.12
36 ------------
32 ------------
37
33
38 * Fully integrate process startup with the daemons for full process
39 management.
40
34
41 * Make the capabilites of :command:`ipcluster` available from simple Python
42 classes.
43
35
44 Major areas of work
36 Major areas of work
45 ===================
37 ===================
46
38
47 Refactoring the main IPython core
39 Refactoring the main IPython core
48 ---------------------------------
40 ---------------------------------
49
41
50 Process management for :mod:`IPython.kernel`
42 Process management for :mod:`IPython.kernel`
51 --------------------------------------------
43 --------------------------------------------
52
44
53 Configuration system
45 Configuration system
54 --------------------
46 --------------------
55
47
56 Performance problems
48 Performance problems
57 --------------------
49 --------------------
58
50
59 Currently, we have a number of performance issues that are waiting to bite users:
51 Currently, we have a number of performance issues that are waiting to bite users:
60
52
61 * The controller stores a large amount of state in Python dictionaries. Under
53 * The controller stores a large amount of state in Python dictionaries. Under
62 heavy usage, these dicts with get very large, causing memory usage problems.
54 heavy usage, these dicts with get very large, causing memory usage problems.
63 We need to develop more scalable solutions to this problem, such as using a
55 We need to develop more scalable solutions to this problem, such as using a
64 sqlite database to store this state. This will also help the controller to
56 sqlite database to store this state. This will also help the controller to
65 be more fault tolerant.
57 be more fault tolerant.
66
58
67 * We currently don't have a good way of handling large objects in the
59 * We currently don't have a good way of handling large objects in the
68 controller. The biggest problem is that because we don't have any way of
60 controller. The biggest problem is that because we don't have any way of
69 streaming objects, we get lots of temporary copies in the low-level buffers.
61 streaming objects, we get lots of temporary copies in the low-level buffers.
70 We need to implement a better serialization approach and true streaming
62 We need to implement a better serialization approach and true streaming
71 support.
63 support.
72
64
73 * The controller currently unpickles and repickles objects. We need to use the
65 * The controller currently unpickles and repickles objects. We need to use the
74 [push|pull]_serialized methods instead.
66 [push|pull]_serialized methods instead.
75
67
76 * Currently the controller is a bottleneck. The best approach for this is to
68 * Currently the controller is a bottleneck. The best approach for this is to
77 separate the controller itself into multiple processes, one for the core
69 separate the controller itself into multiple processes, one for the core
78 controller and one each for the controller interfaces.
70 controller and one each for the controller interfaces.
79
71
80
72
81
73
@@ -1,1632 +1,1539 b''
1 =================
1 =================
2 IPython reference
2 IPython reference
3 =================
3 =================
4
4
5 .. _command_line_options:
5 .. _command_line_options:
6
6
7 Command-line usage
7 Command-line usage
8 ==================
8 ==================
9
9
10 You start IPython with the command::
10 You start IPython with the command::
11
11
12 $ ipython [options] files
12 $ ipython [options] files
13
13
14 If invoked with no options, it executes all the files listed in sequence
14 If invoked with no options, it executes all the files listed in sequence
15 and drops you into the interpreter while still acknowledging any options
15 and drops you into the interpreter while still acknowledging any options
16 you may have set in your ipythonrc file. This behavior is different from
16 you may have set in your ipythonrc file. This behavior is different from
17 standard Python, which when called as python -i will only execute one
17 standard Python, which when called as python -i will only execute one
18 file and ignore your configuration setup.
18 file and ignore your configuration setup.
19
19
20 Please note that some of the configuration options are not available at
20 Please note that some of the configuration options are not available at
21 the command line, simply because they are not practical here. Look into
21 the command line, simply because they are not practical here. Look into
22 your ipythonrc configuration file for details on those. This file
22 your ipythonrc configuration file for details on those. This file
23 typically installed in the $HOME/.ipython directory. For Windows users,
23 typically installed in the $HOME/.ipython directory. For Windows users,
24 $HOME resolves to C:\\Documents and Settings\\YourUserName in most
24 $HOME resolves to C:\\Documents and Settings\\YourUserName in most
25 instances. In the rest of this text, we will refer to this directory as
25 instances. In the rest of this text, we will refer to this directory as
26 IPYTHONDIR.
26 IPYTHONDIR.
27
27
28 .. _Threading options:
29
28
30
29
31 Special Threading Options
30 Special Threading Options
32 -------------------------
31 -------------------------
33
32
34 The following special options are ONLY valid at the beginning of the
33 Previously IPython had command line options for controlling GUI event loop
35 command line, and not later. This is because they control the initial-
34 integration (-gthread, -qthread, -q4thread, -wthread, -pylab). As of IPython
36 ization of ipython itself, before the normal option-handling mechanism
35 version 0.11, these have been deprecated. Please see the new ``%gui``
37 is active.
36 magic command or :ref:`this section <gui_support>` for details on the new
38
37 interface.
39 -gthread, -qthread, -q4thread, -wthread, -pylab:
40 Only one of these can be given, and it can only be given as
41 the first option passed to IPython (it will have no effect in
42 any other position). They provide threading support for the
43 GTK, Qt (versions 3 and 4) and WXPython toolkits, and for the
44 matplotlib library.
45
46 With any of the first four options, IPython starts running a
47 separate thread for the graphical toolkit's operation, so that
48 you can open and control graphical elements from within an
49 IPython command line, without blocking. All four provide
50 essentially the same functionality, respectively for GTK, Qt3,
51 Qt4 and WXWidgets (via their Python interfaces).
52
53 Note that with -wthread, you can additionally use the
54 -wxversion option to request a specific version of wx to be
55 used. This requires that you have the wxversion Python module
56 installed, which is part of recent wxPython distributions.
57
58 If -pylab is given, IPython loads special support for the mat
59 plotlib library (http://matplotlib.sourceforge.net), allowing
60 interactive usage of any of its backends as defined in the
61 user's ~/.matplotlib/matplotlibrc file. It automatically
62 activates GTK, Qt or WX threading for IPyhton if the choice of
63 matplotlib backend requires it. It also modifies the %run
64 command to correctly execute (without blocking) any
65 matplotlib-based script which calls show() at the end.
66
67 -tk
68 The -g/q/q4/wthread options, and -pylab (if matplotlib is
69 configured to use GTK, Qt3, Qt4 or WX), will normally block Tk
70 graphical interfaces. This means that when either GTK, Qt or WX
71 threading is active, any attempt to open a Tk GUI will result in a
72 dead window, and possibly cause the Python interpreter to crash.
73 An extra option, -tk, is available to address this issue. It can
74 only be given as a second option after any of the above (-gthread,
75 -wthread or -pylab).
76
77 If -tk is given, IPython will try to coordinate Tk threading
78 with GTK, Qt or WX. This is however potentially unreliable, and
79 you will have to test on your platform and Python configuration to
80 determine whether it works for you. Debian users have reported
81 success, apparently due to the fact that Debian builds all of Tcl,
82 Tk, Tkinter and Python with pthreads support. Under other Linux
83 environments (such as Fedora Core 2/3), this option has caused
84 random crashes and lockups of the Python interpreter. Under other
85 operating systems (Mac OSX and Windows), you'll need to try it to
86 find out, since currently no user reports are available.
87
88 There is unfortunately no way for IPython to determine at run time
89 whether -tk will work reliably or not, so you will need to do some
90 experiments before relying on it for regular work.
91
92
93
38
94 Regular Options
39 Regular Options
95 ---------------
40 ---------------
96
41
97 After the above threading options have been given, regular options can
42 After the above threading options have been given, regular options can
98 follow in any order. All options can be abbreviated to their shortest
43 follow in any order. All options can be abbreviated to their shortest
99 non-ambiguous form and are case-sensitive. One or two dashes can be
44 non-ambiguous form and are case-sensitive. One or two dashes can be
100 used. Some options have an alternate short form, indicated after a ``|``.
45 used. Some options have an alternate short form, indicated after a ``|``.
101
46
102 Most options can also be set from your ipythonrc configuration file. See
47 Most options can also be set from your ipythonrc configuration file. See
103 the provided example for more details on what the options do. Options
48 the provided example for more details on what the options do. Options
104 given at the command line override the values set in the ipythonrc file.
49 given at the command line override the values set in the ipythonrc file.
105
50
106 All options with a [no] prepended can be specified in negated form
51 All options with a [no] prepended can be specified in negated form
107 (-nooption instead of -option) to turn the feature off.
52 (-nooption instead of -option) to turn the feature off.
108
53
109 -help print a help message and exit.
54 -help print a help message and exit.
110
55
111 -pylab
56 -pylab
112 this can only be given as the first option passed to IPython
57 Deprecated. See :ref:`Matplotlib support <matplotlib_support>`
113 (it will have no effect in any other position). It adds
58 for more details.
114 special support for the matplotlib library
115 (http://matplotlib.sourceforge.ne), allowing interactive usage
116 of any of its backends as defined in the user's .matplotlibrc
117 file. It automatically activates GTK or WX threading for
118 IPyhton if the choice of matplotlib backend requires it. It
119 also modifies the %run command to correctly execute (without
120 blocking) any matplotlib-based script which calls show() at
121 the end. See `Matplotlib support`_ for more details.
122
59
123 -autocall <val>
60 -autocall <val>
124 Make IPython automatically call any callable object even if you
61 Make IPython automatically call any callable object even if you
125 didn't type explicit parentheses. For example, 'str 43' becomes
62 didn't type explicit parentheses. For example, 'str 43' becomes
126 'str(43)' automatically. The value can be '0' to disable the feature,
63 'str(43)' automatically. The value can be '0' to disable the feature,
127 '1' for smart autocall, where it is not applied if there are no more
64 '1' for smart autocall, where it is not applied if there are no more
128 arguments on the line, and '2' for full autocall, where all callable
65 arguments on the line, and '2' for full autocall, where all callable
129 objects are automatically called (even if no arguments are
66 objects are automatically called (even if no arguments are
130 present). The default is '1'.
67 present). The default is '1'.
131
68
132 -[no]autoindent
69 -[no]autoindent
133 Turn automatic indentation on/off.
70 Turn automatic indentation on/off.
134
71
135 -[no]automagic
72 -[no]automagic
136 make magic commands automatic (without needing their first character
73 make magic commands automatic (without needing their first character
137 to be %). Type %magic at the IPython prompt for more information.
74 to be %). Type %magic at the IPython prompt for more information.
138
75
139 -[no]autoedit_syntax
76 -[no]autoedit_syntax
140 When a syntax error occurs after editing a file, automatically
77 When a syntax error occurs after editing a file, automatically
141 open the file to the trouble causing line for convenient
78 open the file to the trouble causing line for convenient
142 fixing.
79 fixing.
143
80
144 -[no]banner Print the initial information banner (default on).
81 -[no]banner Print the initial information banner (default on).
145
82
146 -c <command>
83 -c <command>
147 execute the given command string. This is similar to the -c
84 execute the given command string. This is similar to the -c
148 option in the normal Python interpreter.
85 option in the normal Python interpreter.
149
86
150 -cache_size, cs <n>
87 -cache_size, cs <n>
151 size of the output cache (maximum number of entries to hold in
88 size of the output cache (maximum number of entries to hold in
152 memory). The default is 1000, you can change it permanently in your
89 memory). The default is 1000, you can change it permanently in your
153 config file. Setting it to 0 completely disables the caching system,
90 config file. Setting it to 0 completely disables the caching system,
154 and the minimum value accepted is 20 (if you provide a value less than
91 and the minimum value accepted is 20 (if you provide a value less than
155 20, it is reset to 0 and a warning is issued) This limit is defined
92 20, it is reset to 0 and a warning is issued) This limit is defined
156 because otherwise you'll spend more time re-flushing a too small cache
93 because otherwise you'll spend more time re-flushing a too small cache
157 than working.
94 than working.
158
95
159 -classic, cl
96 -classic, cl
160 Gives IPython a similar feel to the classic Python
97 Gives IPython a similar feel to the classic Python
161 prompt.
98 prompt.
162
99
163 -colors <scheme>
100 -colors <scheme>
164 Color scheme for prompts and exception reporting. Currently
101 Color scheme for prompts and exception reporting. Currently
165 implemented: NoColor, Linux and LightBG.
102 implemented: NoColor, Linux and LightBG.
166
103
167 -[no]color_info
104 -[no]color_info
168 IPython can display information about objects via a set of functions,
105 IPython can display information about objects via a set of functions,
169 and optionally can use colors for this, syntax highlighting source
106 and optionally can use colors for this, syntax highlighting source
170 code and various other elements. However, because this information is
107 code and various other elements. However, because this information is
171 passed through a pager (like 'less') and many pagers get confused with
108 passed through a pager (like 'less') and many pagers get confused with
172 color codes, this option is off by default. You can test it and turn
109 color codes, this option is off by default. You can test it and turn
173 it on permanently in your ipythonrc file if it works for you. As a
110 it on permanently in your ipythonrc file if it works for you. As a
174 reference, the 'less' pager supplied with Mandrake 8.2 works ok, but
111 reference, the 'less' pager supplied with Mandrake 8.2 works ok, but
175 that in RedHat 7.2 doesn't.
112 that in RedHat 7.2 doesn't.
176
113
177 Test it and turn it on permanently if it works with your
114 Test it and turn it on permanently if it works with your
178 system. The magic function %color_info allows you to toggle this
115 system. The magic function %color_info allows you to toggle this
179 interactively for testing.
116 interactively for testing.
180
117
181 -[no]debug
118 -[no]debug
182 Show information about the loading process. Very useful to pin down
119 Show information about the loading process. Very useful to pin down
183 problems with your configuration files or to get details about
120 problems with your configuration files or to get details about
184 session restores.
121 session restores.
185
122
186 -[no]deep_reload:
123 -[no]deep_reload:
187 IPython can use the deep_reload module which reloads changes in
124 IPython can use the deep_reload module which reloads changes in
188 modules recursively (it replaces the reload() function, so you don't
125 modules recursively (it replaces the reload() function, so you don't
189 need to change anything to use it). deep_reload() forces a full
126 need to change anything to use it). deep_reload() forces a full
190 reload of modules whose code may have changed, which the default
127 reload of modules whose code may have changed, which the default
191 reload() function does not.
128 reload() function does not.
192
129
193 When deep_reload is off, IPython will use the normal reload(),
130 When deep_reload is off, IPython will use the normal reload(),
194 but deep_reload will still be available as dreload(). This
131 but deep_reload will still be available as dreload(). This
195 feature is off by default [which means that you have both
132 feature is off by default [which means that you have both
196 normal reload() and dreload()].
133 normal reload() and dreload()].
197
134
198 -editor <name>
135 -editor <name>
199 Which editor to use with the %edit command. By default,
136 Which editor to use with the %edit command. By default,
200 IPython will honor your EDITOR environment variable (if not
137 IPython will honor your EDITOR environment variable (if not
201 set, vi is the Unix default and notepad the Windows one).
138 set, vi is the Unix default and notepad the Windows one).
202 Since this editor is invoked on the fly by IPython and is
139 Since this editor is invoked on the fly by IPython and is
203 meant for editing small code snippets, you may want to use a
140 meant for editing small code snippets, you may want to use a
204 small, lightweight editor here (in case your default EDITOR is
141 small, lightweight editor here (in case your default EDITOR is
205 something like Emacs).
142 something like Emacs).
206
143
207 -ipythondir <name>
144 -ipythondir <name>
208 name of your IPython configuration directory IPYTHONDIR. This
145 name of your IPython configuration directory IPYTHONDIR. This
209 can also be specified through the environment variable
146 can also be specified through the environment variable
210 IPYTHONDIR.
147 IPYTHONDIR.
211
148
212 -log, l
149 -log, l
213 generate a log file of all input. The file is named
150 generate a log file of all input. The file is named
214 ipython_log.py in your current directory (which prevents logs
151 ipython_log.py in your current directory (which prevents logs
215 from multiple IPython sessions from trampling each other). You
152 from multiple IPython sessions from trampling each other). You
216 can use this to later restore a session by loading your
153 can use this to later restore a session by loading your
217 logfile as a file to be executed with option -logplay (see
154 logfile as a file to be executed with option -logplay (see
218 below).
155 below).
219
156
220 -logfile, lf <name> specify the name of your logfile.
157 -logfile, lf <name> specify the name of your logfile.
221
158
222 -logplay, lp <name>
159 -logplay, lp <name>
223
160
224 you can replay a previous log. For restoring a session as close as
161 you can replay a previous log. For restoring a session as close as
225 possible to the state you left it in, use this option (don't just run
162 possible to the state you left it in, use this option (don't just run
226 the logfile). With -logplay, IPython will try to reconstruct the
163 the logfile). With -logplay, IPython will try to reconstruct the
227 previous working environment in full, not just execute the commands in
164 previous working environment in full, not just execute the commands in
228 the logfile.
165 the logfile.
229
166
230 When a session is restored, logging is automatically turned on
167 When a session is restored, logging is automatically turned on
231 again with the name of the logfile it was invoked with (it is
168 again with the name of the logfile it was invoked with (it is
232 read from the log header). So once you've turned logging on for
169 read from the log header). So once you've turned logging on for
233 a session, you can quit IPython and reload it as many times as
170 a session, you can quit IPython and reload it as many times as
234 you want and it will continue to log its history and restore
171 you want and it will continue to log its history and restore
235 from the beginning every time.
172 from the beginning every time.
236
173
237 Caveats: there are limitations in this option. The history
174 Caveats: there are limitations in this option. The history
238 variables _i*,_* and _dh don't get restored properly. In the
175 variables _i*,_* and _dh don't get restored properly. In the
239 future we will try to implement full session saving by writing
176 future we will try to implement full session saving by writing
240 and retrieving a 'snapshot' of the memory state of IPython. But
177 and retrieving a 'snapshot' of the memory state of IPython. But
241 our first attempts failed because of inherent limitations of
178 our first attempts failed because of inherent limitations of
242 Python's Pickle module, so this may have to wait.
179 Python's Pickle module, so this may have to wait.
243
180
244 -[no]messages
181 -[no]messages
245 Print messages which IPython collects about its startup
182 Print messages which IPython collects about its startup
246 process (default on).
183 process (default on).
247
184
248 -[no]pdb
185 -[no]pdb
249 Automatically call the pdb debugger after every uncaught
186 Automatically call the pdb debugger after every uncaught
250 exception. If you are used to debugging using pdb, this puts
187 exception. If you are used to debugging using pdb, this puts
251 you automatically inside of it after any call (either in
188 you automatically inside of it after any call (either in
252 IPython or in code called by it) which triggers an exception
189 IPython or in code called by it) which triggers an exception
253 which goes uncaught.
190 which goes uncaught.
254
191
255 -pydb
192 -pydb
256 Makes IPython use the third party "pydb" package as debugger,
193 Makes IPython use the third party "pydb" package as debugger,
257 instead of pdb. Requires that pydb is installed.
194 instead of pdb. Requires that pydb is installed.
258
195
259 -[no]pprint
196 -[no]pprint
260 ipython can optionally use the pprint (pretty printer) module
197 ipython can optionally use the pprint (pretty printer) module
261 for displaying results. pprint tends to give a nicer display
198 for displaying results. pprint tends to give a nicer display
262 of nested data structures. If you like it, you can turn it on
199 of nested data structures. If you like it, you can turn it on
263 permanently in your config file (default off).
200 permanently in your config file (default off).
264
201
265 -profile, p <name>
202 -profile, p <name>
266
203
267 assume that your config file is ipythonrc-<name> or
204 assume that your config file is ipythonrc-<name> or
268 ipy_profile_<name>.py (looks in current dir first, then in
205 ipy_profile_<name>.py (looks in current dir first, then in
269 IPYTHONDIR). This is a quick way to keep and load multiple
206 IPYTHONDIR). This is a quick way to keep and load multiple
270 config files for different tasks, especially if you use the
207 config files for different tasks, especially if you use the
271 include option of config files. You can keep a basic
208 include option of config files. You can keep a basic
272 IPYTHONDIR/ipythonrc file and then have other 'profiles' which
209 IPYTHONDIR/ipythonrc file and then have other 'profiles' which
273 include this one and load extra things for particular
210 include this one and load extra things for particular
274 tasks. For example:
211 tasks. For example:
275
212
276 1. $HOME/.ipython/ipythonrc : load basic things you always want.
213 1. $HOME/.ipython/ipythonrc : load basic things you always want.
277 2. $HOME/.ipython/ipythonrc-math : load (1) and basic math-related modules.
214 2. $HOME/.ipython/ipythonrc-math : load (1) and basic math-related modules.
278 3. $HOME/.ipython/ipythonrc-numeric : load (1) and Numeric and plotting modules.
215 3. $HOME/.ipython/ipythonrc-numeric : load (1) and Numeric and plotting modules.
279
216
280 Since it is possible to create an endless loop by having
217 Since it is possible to create an endless loop by having
281 circular file inclusions, IPython will stop if it reaches 15
218 circular file inclusions, IPython will stop if it reaches 15
282 recursive inclusions.
219 recursive inclusions.
283
220
284 -prompt_in1, pi1 <string>
221 -prompt_in1, pi1 <string>
285
222
286 Specify the string used for input prompts. Note that if you are using
223 Specify the string used for input prompts. Note that if you are using
287 numbered prompts, the number is represented with a '\#' in the
224 numbered prompts, the number is represented with a '\#' in the
288 string. Don't forget to quote strings with spaces embedded in
225 string. Don't forget to quote strings with spaces embedded in
289 them. Default: 'In [\#]:'. The :ref:`prompts section <prompts>`
226 them. Default: 'In [\#]:'. The :ref:`prompts section <prompts>`
290 discusses in detail all the available escapes to customize your
227 discusses in detail all the available escapes to customize your
291 prompts.
228 prompts.
292
229
293 -prompt_in2, pi2 <string>
230 -prompt_in2, pi2 <string>
294 Similar to the previous option, but used for the continuation
231 Similar to the previous option, but used for the continuation
295 prompts. The special sequence '\D' is similar to '\#', but
232 prompts. The special sequence '\D' is similar to '\#', but
296 with all digits replaced dots (so you can have your
233 with all digits replaced dots (so you can have your
297 continuation prompt aligned with your input prompt). Default:
234 continuation prompt aligned with your input prompt). Default:
298 ' .\D.:' (note three spaces at the start for alignment with
235 ' .\D.:' (note three spaces at the start for alignment with
299 'In [\#]').
236 'In [\#]').
300
237
301 -prompt_out,po <string>
238 -prompt_out,po <string>
302 String used for output prompts, also uses numbers like
239 String used for output prompts, also uses numbers like
303 prompt_in1. Default: 'Out[\#]:'
240 prompt_in1. Default: 'Out[\#]:'
304
241
305 -quick start in bare bones mode (no config file loaded).
242 -quick start in bare bones mode (no config file loaded).
306
243
307 -rcfile <name>
244 -rcfile <name>
308 name of your IPython resource configuration file. Normally
245 name of your IPython resource configuration file. Normally
309 IPython loads ipythonrc (from current directory) or
246 IPython loads ipythonrc (from current directory) or
310 IPYTHONDIR/ipythonrc.
247 IPYTHONDIR/ipythonrc.
311
248
312 If the loading of your config file fails, IPython starts with
249 If the loading of your config file fails, IPython starts with
313 a bare bones configuration (no modules loaded at all).
250 a bare bones configuration (no modules loaded at all).
314
251
315 -[no]readline
252 -[no]readline
316 use the readline library, which is needed to support name
253 use the readline library, which is needed to support name
317 completion and command history, among other things. It is
254 completion and command history, among other things. It is
318 enabled by default, but may cause problems for users of
255 enabled by default, but may cause problems for users of
319 X/Emacs in Python comint or shell buffers.
256 X/Emacs in Python comint or shell buffers.
320
257
321 Note that X/Emacs 'eterm' buffers (opened with M-x term) support
258 Note that X/Emacs 'eterm' buffers (opened with M-x term) support
322 IPython's readline and syntax coloring fine, only 'emacs' (M-x
259 IPython's readline and syntax coloring fine, only 'emacs' (M-x
323 shell and C-c !) buffers do not.
260 shell and C-c !) buffers do not.
324
261
325 -screen_length, sl <n>
262 -screen_length, sl <n>
326 number of lines of your screen. This is used to control
263 number of lines of your screen. This is used to control
327 printing of very long strings. Strings longer than this number
264 printing of very long strings. Strings longer than this number
328 of lines will be sent through a pager instead of directly
265 of lines will be sent through a pager instead of directly
329 printed.
266 printed.
330
267
331 The default value for this is 0, which means IPython will
268 The default value for this is 0, which means IPython will
332 auto-detect your screen size every time it needs to print certain
269 auto-detect your screen size every time it needs to print certain
333 potentially long strings (this doesn't change the behavior of the
270 potentially long strings (this doesn't change the behavior of the
334 'print' keyword, it's only triggered internally). If for some
271 'print' keyword, it's only triggered internally). If for some
335 reason this isn't working well (it needs curses support), specify
272 reason this isn't working well (it needs curses support), specify
336 it yourself. Otherwise don't change the default.
273 it yourself. Otherwise don't change the default.
337
274
338 -separate_in, si <string>
275 -separate_in, si <string>
339
276
340 separator before input prompts.
277 separator before input prompts.
341 Default: '\n'
278 Default: '\n'
342
279
343 -separate_out, so <string>
280 -separate_out, so <string>
344 separator before output prompts.
281 separator before output prompts.
345 Default: nothing.
282 Default: nothing.
346
283
347 -separate_out2, so2
284 -separate_out2, so2
348 separator after output prompts.
285 separator after output prompts.
349 Default: nothing.
286 Default: nothing.
350 For these three options, use the value 0 to specify no separator.
287 For these three options, use the value 0 to specify no separator.
351
288
352 -nosep
289 -nosep
353 shorthand for '-SeparateIn 0 -SeparateOut 0 -SeparateOut2
290 shorthand for '-SeparateIn 0 -SeparateOut 0 -SeparateOut2
354 0'. Simply removes all input/output separators.
291 0'. Simply removes all input/output separators.
355
292
356 -upgrade
293 -upgrade
357 allows you to upgrade your IPYTHONDIR configuration when you
294 allows you to upgrade your IPYTHONDIR configuration when you
358 install a new version of IPython. Since new versions may
295 install a new version of IPython. Since new versions may
359 include new command line options or example files, this copies
296 include new command line options or example files, this copies
360 updated ipythonrc-type files. However, it backs up (with a
297 updated ipythonrc-type files. However, it backs up (with a
361 .old extension) all files which it overwrites so that you can
298 .old extension) all files which it overwrites so that you can
362 merge back any customizations you might have in your personal
299 merge back any customizations you might have in your personal
363 files. Note that you should probably use %upgrade instead,
300 files. Note that you should probably use %upgrade instead,
364 it's a safer alternative.
301 it's a safer alternative.
365
302
366
303
367 -Version print version information and exit.
304 -Version print version information and exit.
368
305
369 -wxversion <string>
306 -wxversion <string>
370 Select a specific version of wxPython (used in conjunction
307 Deprecated.
371 with -wthread). Requires the wxversion module, part of recent
372 wxPython distributions
373
308
374 -xmode <modename>
309 -xmode <modename>
375
310
376 Mode for exception reporting.
311 Mode for exception reporting.
377
312
378 Valid modes: Plain, Context and Verbose.
313 Valid modes: Plain, Context and Verbose.
379
314
380 * Plain: similar to python's normal traceback printing.
315 * Plain: similar to python's normal traceback printing.
381 * Context: prints 5 lines of context source code around each
316 * Context: prints 5 lines of context source code around each
382 line in the traceback.
317 line in the traceback.
383 * Verbose: similar to Context, but additionally prints the
318 * Verbose: similar to Context, but additionally prints the
384 variables currently visible where the exception happened
319 variables currently visible where the exception happened
385 (shortening their strings if too long). This can potentially be
320 (shortening their strings if too long). This can potentially be
386 very slow, if you happen to have a huge data structure whose
321 very slow, if you happen to have a huge data structure whose
387 string representation is complex to compute. Your computer may
322 string representation is complex to compute. Your computer may
388 appear to freeze for a while with cpu usage at 100%. If this
323 appear to freeze for a while with cpu usage at 100%. If this
389 occurs, you can cancel the traceback with Ctrl-C (maybe hitting it
324 occurs, you can cancel the traceback with Ctrl-C (maybe hitting it
390 more than once).
325 more than once).
391
326
392 Interactive use
327 Interactive use
393 ===============
328 ===============
394
329
395 Warning: IPython relies on the existence of a global variable called
330 Warning: IPython relies on the existence of a global variable called
396 _ip which controls the shell itself. If you redefine _ip to anything,
331 _ip which controls the shell itself. If you redefine _ip to anything,
397 bizarre behavior will quickly occur.
332 bizarre behavior will quickly occur.
398
333
399 Other than the above warning, IPython is meant to work as a drop-in
334 Other than the above warning, IPython is meant to work as a drop-in
400 replacement for the standard interactive interpreter. As such, any code
335 replacement for the standard interactive interpreter. As such, any code
401 which is valid python should execute normally under IPython (cases where
336 which is valid python should execute normally under IPython (cases where
402 this is not true should be reported as bugs). It does, however, offer
337 this is not true should be reported as bugs). It does, however, offer
403 many features which are not available at a standard python prompt. What
338 many features which are not available at a standard python prompt. What
404 follows is a list of these.
339 follows is a list of these.
405
340
406
341
407 Caution for Windows users
342 Caution for Windows users
408 -------------------------
343 -------------------------
409
344
410 Windows, unfortunately, uses the '\' character as a path
345 Windows, unfortunately, uses the '\' character as a path
411 separator. This is a terrible choice, because '\' also represents the
346 separator. This is a terrible choice, because '\' also represents the
412 escape character in most modern programming languages, including
347 escape character in most modern programming languages, including
413 Python. For this reason, using '/' character is recommended if you
348 Python. For this reason, using '/' character is recommended if you
414 have problems with ``\``. However, in Windows commands '/' flags
349 have problems with ``\``. However, in Windows commands '/' flags
415 options, so you can not use it for the root directory. This means that
350 options, so you can not use it for the root directory. This means that
416 paths beginning at the root must be typed in a contrived manner like:
351 paths beginning at the root must be typed in a contrived manner like:
417 ``%copy \opt/foo/bar.txt \tmp``
352 ``%copy \opt/foo/bar.txt \tmp``
418
353
419 .. _magic:
354 .. _magic:
420
355
421 Magic command system
356 Magic command system
422 --------------------
357 --------------------
423
358
424 IPython will treat any line whose first character is a % as a special
359 IPython will treat any line whose first character is a % as a special
425 call to a 'magic' function. These allow you to control the behavior of
360 call to a 'magic' function. These allow you to control the behavior of
426 IPython itself, plus a lot of system-type features. They are all
361 IPython itself, plus a lot of system-type features. They are all
427 prefixed with a % character, but parameters are given without
362 prefixed with a % character, but parameters are given without
428 parentheses or quotes.
363 parentheses or quotes.
429
364
430 Example: typing '%cd mydir' (without the quotes) changes you working
365 Example: typing '%cd mydir' (without the quotes) changes you working
431 directory to 'mydir', if it exists.
366 directory to 'mydir', if it exists.
432
367
433 If you have 'automagic' enabled (in your ipythonrc file, via the command
368 If you have 'automagic' enabled (in your ipythonrc file, via the command
434 line option -automagic or with the %automagic function), you don't need
369 line option -automagic or with the %automagic function), you don't need
435 to type in the % explicitly. IPython will scan its internal list of
370 to type in the % explicitly. IPython will scan its internal list of
436 magic functions and call one if it exists. With automagic on you can
371 magic functions and call one if it exists. With automagic on you can
437 then just type 'cd mydir' to go to directory 'mydir'. The automagic
372 then just type 'cd mydir' to go to directory 'mydir'. The automagic
438 system has the lowest possible precedence in name searches, so defining
373 system has the lowest possible precedence in name searches, so defining
439 an identifier with the same name as an existing magic function will
374 an identifier with the same name as an existing magic function will
440 shadow it for automagic use. You can still access the shadowed magic
375 shadow it for automagic use. You can still access the shadowed magic
441 function by explicitly using the % character at the beginning of the line.
376 function by explicitly using the % character at the beginning of the line.
442
377
443 An example (with automagic on) should clarify all this::
378 An example (with automagic on) should clarify all this::
444
379
445 In [1]: cd ipython # %cd is called by automagic
380 In [1]: cd ipython # %cd is called by automagic
446
381
447 /home/fperez/ipython
382 /home/fperez/ipython
448
383
449 In [2]: cd=1 # now cd is just a variable
384 In [2]: cd=1 # now cd is just a variable
450
385
451 In [3]: cd .. # and doesn't work as a function anymore
386 In [3]: cd .. # and doesn't work as a function anymore
452
387
453 ------------------------------
388 ------------------------------
454
389
455 File "<console>", line 1
390 File "<console>", line 1
456
391
457 cd ..
392 cd ..
458
393
459 ^
394 ^
460
395
461 SyntaxError: invalid syntax
396 SyntaxError: invalid syntax
462
397
463 In [4]: %cd .. # but %cd always works
398 In [4]: %cd .. # but %cd always works
464
399
465 /home/fperez
400 /home/fperez
466
401
467 In [5]: del cd # if you remove the cd variable
402 In [5]: del cd # if you remove the cd variable
468
403
469 In [6]: cd ipython # automagic can work again
404 In [6]: cd ipython # automagic can work again
470
405
471 /home/fperez/ipython
406 /home/fperez/ipython
472
407
473 You can define your own magic functions to extend the system. The
408 You can define your own magic functions to extend the system. The
474 following example defines a new magic command, %impall::
409 following example defines a new magic command, %impall::
475
410
476 import IPython.ipapi
411 import IPython.ipapi
477
412
478 ip = IPython.ipapi.get()
413 ip = IPython.ipapi.get()
479
414
480 def doimp(self, arg):
415 def doimp(self, arg):
481
416
482 ip = self.api
417 ip = self.api
483
418
484 ip.ex("import %s; reload(%s); from %s import *" % (
419 ip.ex("import %s; reload(%s); from %s import *" % (
485
420
486 arg,arg,arg)
421 arg,arg,arg)
487
422
488 )
423 )
489
424
490 ip.expose_magic('impall', doimp)
425 ip.expose_magic('impall', doimp)
491
426
492 You can also define your own aliased names for magic functions. In your
427 You can also define your own aliased names for magic functions. In your
493 ipythonrc file, placing a line like::
428 ipythonrc file, placing a line like::
494
429
495 execute __IP.magic_cl = __IP.magic_clear
430 execute __IP.magic_cl = __IP.magic_clear
496
431
497 will define %cl as a new name for %clear.
432 will define %cl as a new name for %clear.
498
433
499 Type %magic for more information, including a list of all available
434 Type %magic for more information, including a list of all available
500 magic functions at any time and their docstrings. You can also type
435 magic functions at any time and their docstrings. You can also type
501 %magic_function_name? (see sec. 6.4 <#sec:dyn-object-info> for
436 %magic_function_name? (see sec. 6.4 <#sec:dyn-object-info> for
502 information on the '?' system) to get information about any particular
437 information on the '?' system) to get information about any particular
503 magic function you are interested in.
438 magic function you are interested in.
504
439
505 The API documentation for the :mod:`IPython.Magic` module contains the full
440 The API documentation for the :mod:`IPython.Magic` module contains the full
506 docstrings of all currently available magic commands.
441 docstrings of all currently available magic commands.
507
442
508
443
509 Access to the standard Python help
444 Access to the standard Python help
510 ----------------------------------
445 ----------------------------------
511
446
512 As of Python 2.1, a help system is available with access to object docstrings
447 As of Python 2.1, a help system is available with access to object docstrings
513 and the Python manuals. Simply type 'help' (no quotes) to access it. You can
448 and the Python manuals. Simply type 'help' (no quotes) to access it. You can
514 also type help(object) to obtain information about a given object, and
449 also type help(object) to obtain information about a given object, and
515 help('keyword') for information on a keyword. As noted :ref:`here
450 help('keyword') for information on a keyword. As noted :ref:`here
516 <accessing_help>`, you need to properly configure your environment variable
451 <accessing_help>`, you need to properly configure your environment variable
517 PYTHONDOCS for this feature to work correctly.
452 PYTHONDOCS for this feature to work correctly.
518
453
519 .. _dynamic_object_info:
454 .. _dynamic_object_info:
520
455
521 Dynamic object information
456 Dynamic object information
522 --------------------------
457 --------------------------
523
458
524 Typing ?word or word? prints detailed information about an object. If
459 Typing ?word or word? prints detailed information about an object. If
525 certain strings in the object are too long (docstrings, code, etc.) they
460 certain strings in the object are too long (docstrings, code, etc.) they
526 get snipped in the center for brevity. This system gives access variable
461 get snipped in the center for brevity. This system gives access variable
527 types and values, full source code for any object (if available),
462 types and values, full source code for any object (if available),
528 function prototypes and other useful information.
463 function prototypes and other useful information.
529
464
530 Typing ??word or word?? gives access to the full information without
465 Typing ??word or word?? gives access to the full information without
531 snipping long strings. Long strings are sent to the screen through the
466 snipping long strings. Long strings are sent to the screen through the
532 less pager if longer than the screen and printed otherwise. On systems
467 less pager if longer than the screen and printed otherwise. On systems
533 lacking the less command, IPython uses a very basic internal pager.
468 lacking the less command, IPython uses a very basic internal pager.
534
469
535 The following magic functions are particularly useful for gathering
470 The following magic functions are particularly useful for gathering
536 information about your working environment. You can get more details by
471 information about your working environment. You can get more details by
537 typing %magic or querying them individually (use %function_name? with or
472 typing %magic or querying them individually (use %function_name? with or
538 without the %), this is just a summary:
473 without the %), this is just a summary:
539
474
540 * **%pdoc <object>**: Print (or run through a pager if too long) the
475 * **%pdoc <object>**: Print (or run through a pager if too long) the
541 docstring for an object. If the given object is a class, it will
476 docstring for an object. If the given object is a class, it will
542 print both the class and the constructor docstrings.
477 print both the class and the constructor docstrings.
543 * **%pdef <object>**: Print the definition header for any callable
478 * **%pdef <object>**: Print the definition header for any callable
544 object. If the object is a class, print the constructor information.
479 object. If the object is a class, print the constructor information.
545 * **%psource <object>**: Print (or run through a pager if too long)
480 * **%psource <object>**: Print (or run through a pager if too long)
546 the source code for an object.
481 the source code for an object.
547 * **%pfile <object>**: Show the entire source file where an object was
482 * **%pfile <object>**: Show the entire source file where an object was
548 defined via a pager, opening it at the line where the object
483 defined via a pager, opening it at the line where the object
549 definition begins.
484 definition begins.
550 * **%who/%whos**: These functions give information about identifiers
485 * **%who/%whos**: These functions give information about identifiers
551 you have defined interactively (not things you loaded or defined
486 you have defined interactively (not things you loaded or defined
552 in your configuration files). %who just prints a list of
487 in your configuration files). %who just prints a list of
553 identifiers and %whos prints a table with some basic details about
488 identifiers and %whos prints a table with some basic details about
554 each identifier.
489 each identifier.
555
490
556 Note that the dynamic object information functions (?/??, %pdoc, %pfile,
491 Note that the dynamic object information functions (?/??, %pdoc, %pfile,
557 %pdef, %psource) give you access to documentation even on things which
492 %pdef, %psource) give you access to documentation even on things which
558 are not really defined as separate identifiers. Try for example typing
493 are not really defined as separate identifiers. Try for example typing
559 {}.get? or after doing import os, type os.path.abspath??.
494 {}.get? or after doing import os, type os.path.abspath??.
560
495
561
496
562 .. _readline:
497 .. _readline:
563
498
564 Readline-based features
499 Readline-based features
565 -----------------------
500 -----------------------
566
501
567 These features require the GNU readline library, so they won't work if
502 These features require the GNU readline library, so they won't work if
568 your Python installation lacks readline support. We will first describe
503 your Python installation lacks readline support. We will first describe
569 the default behavior IPython uses, and then how to change it to suit
504 the default behavior IPython uses, and then how to change it to suit
570 your preferences.
505 your preferences.
571
506
572
507
573 Command line completion
508 Command line completion
574 +++++++++++++++++++++++
509 +++++++++++++++++++++++
575
510
576 At any time, hitting TAB will complete any available python commands or
511 At any time, hitting TAB will complete any available python commands or
577 variable names, and show you a list of the possible completions if
512 variable names, and show you a list of the possible completions if
578 there's no unambiguous one. It will also complete filenames in the
513 there's no unambiguous one. It will also complete filenames in the
579 current directory if no python names match what you've typed so far.
514 current directory if no python names match what you've typed so far.
580
515
581
516
582 Search command history
517 Search command history
583 ++++++++++++++++++++++
518 ++++++++++++++++++++++
584
519
585 IPython provides two ways for searching through previous input and thus
520 IPython provides two ways for searching through previous input and thus
586 reduce the need for repetitive typing:
521 reduce the need for repetitive typing:
587
522
588 1. Start typing, and then use Ctrl-p (previous,up) and Ctrl-n
523 1. Start typing, and then use Ctrl-p (previous,up) and Ctrl-n
589 (next,down) to search through only the history items that match
524 (next,down) to search through only the history items that match
590 what you've typed so far. If you use Ctrl-p/Ctrl-n at a blank
525 what you've typed so far. If you use Ctrl-p/Ctrl-n at a blank
591 prompt, they just behave like normal arrow keys.
526 prompt, they just behave like normal arrow keys.
592 2. Hit Ctrl-r: opens a search prompt. Begin typing and the system
527 2. Hit Ctrl-r: opens a search prompt. Begin typing and the system
593 searches your history for lines that contain what you've typed so
528 searches your history for lines that contain what you've typed so
594 far, completing as much as it can.
529 far, completing as much as it can.
595
530
596
531
597 Persistent command history across sessions
532 Persistent command history across sessions
598 ++++++++++++++++++++++++++++++++++++++++++
533 ++++++++++++++++++++++++++++++++++++++++++
599
534
600 IPython will save your input history when it leaves and reload it next
535 IPython will save your input history when it leaves and reload it next
601 time you restart it. By default, the history file is named
536 time you restart it. By default, the history file is named
602 $IPYTHONDIR/history, but if you've loaded a named profile,
537 $IPYTHONDIR/history, but if you've loaded a named profile,
603 '-PROFILE_NAME' is appended to the name. This allows you to keep
538 '-PROFILE_NAME' is appended to the name. This allows you to keep
604 separate histories related to various tasks: commands related to
539 separate histories related to various tasks: commands related to
605 numerical work will not be clobbered by a system shell history, for
540 numerical work will not be clobbered by a system shell history, for
606 example.
541 example.
607
542
608
543
609 Autoindent
544 Autoindent
610 ++++++++++
545 ++++++++++
611
546
612 IPython can recognize lines ending in ':' and indent the next line,
547 IPython can recognize lines ending in ':' and indent the next line,
613 while also un-indenting automatically after 'raise' or 'return'.
548 while also un-indenting automatically after 'raise' or 'return'.
614
549
615 This feature uses the readline library, so it will honor your ~/.inputrc
550 This feature uses the readline library, so it will honor your ~/.inputrc
616 configuration (or whatever file your INPUTRC variable points to). Adding
551 configuration (or whatever file your INPUTRC variable points to). Adding
617 the following lines to your .inputrc file can make indenting/unindenting
552 the following lines to your .inputrc file can make indenting/unindenting
618 more convenient (M-i indents, M-u unindents)::
553 more convenient (M-i indents, M-u unindents)::
619
554
620 $if Python
555 $if Python
621 "\M-i": " "
556 "\M-i": " "
622 "\M-u": "\d\d\d\d"
557 "\M-u": "\d\d\d\d"
623 $endif
558 $endif
624
559
625 Note that there are 4 spaces between the quote marks after "M-i" above.
560 Note that there are 4 spaces between the quote marks after "M-i" above.
626
561
627 Warning: this feature is ON by default, but it can cause problems with
562 Warning: this feature is ON by default, but it can cause problems with
628 the pasting of multi-line indented code (the pasted code gets
563 the pasting of multi-line indented code (the pasted code gets
629 re-indented on each line). A magic function %autoindent allows you to
564 re-indented on each line). A magic function %autoindent allows you to
630 toggle it on/off at runtime. You can also disable it permanently on in
565 toggle it on/off at runtime. You can also disable it permanently on in
631 your ipythonrc file (set autoindent 0).
566 your ipythonrc file (set autoindent 0).
632
567
633
568
634 Customizing readline behavior
569 Customizing readline behavior
635 +++++++++++++++++++++++++++++
570 +++++++++++++++++++++++++++++
636
571
637 All these features are based on the GNU readline library, which has an
572 All these features are based on the GNU readline library, which has an
638 extremely customizable interface. Normally, readline is configured via a
573 extremely customizable interface. Normally, readline is configured via a
639 file which defines the behavior of the library; the details of the
574 file which defines the behavior of the library; the details of the
640 syntax for this can be found in the readline documentation available
575 syntax for this can be found in the readline documentation available
641 with your system or on the Internet. IPython doesn't read this file (if
576 with your system or on the Internet. IPython doesn't read this file (if
642 it exists) directly, but it does support passing to readline valid
577 it exists) directly, but it does support passing to readline valid
643 options via a simple interface. In brief, you can customize readline by
578 options via a simple interface. In brief, you can customize readline by
644 setting the following options in your ipythonrc configuration file (note
579 setting the following options in your ipythonrc configuration file (note
645 that these options can not be specified at the command line):
580 that these options can not be specified at the command line):
646
581
647 * **readline_parse_and_bind**: this option can appear as many times as
582 * **readline_parse_and_bind**: this option can appear as many times as
648 you want, each time defining a string to be executed via a
583 you want, each time defining a string to be executed via a
649 readline.parse_and_bind() command. The syntax for valid commands
584 readline.parse_and_bind() command. The syntax for valid commands
650 of this kind can be found by reading the documentation for the GNU
585 of this kind can be found by reading the documentation for the GNU
651 readline library, as these commands are of the kind which readline
586 readline library, as these commands are of the kind which readline
652 accepts in its configuration file.
587 accepts in its configuration file.
653 * **readline_remove_delims**: a string of characters to be removed
588 * **readline_remove_delims**: a string of characters to be removed
654 from the default word-delimiters list used by readline, so that
589 from the default word-delimiters list used by readline, so that
655 completions may be performed on strings which contain them. Do not
590 completions may be performed on strings which contain them. Do not
656 change the default value unless you know what you're doing.
591 change the default value unless you know what you're doing.
657 * **readline_omit__names**: when tab-completion is enabled, hitting
592 * **readline_omit__names**: when tab-completion is enabled, hitting
658 <tab> after a '.' in a name will complete all attributes of an
593 <tab> after a '.' in a name will complete all attributes of an
659 object, including all the special methods whose names include
594 object, including all the special methods whose names include
660 double underscores (like __getitem__ or __class__). If you'd
595 double underscores (like __getitem__ or __class__). If you'd
661 rather not see these names by default, you can set this option to
596 rather not see these names by default, you can set this option to
662 1. Note that even when this option is set, you can still see those
597 1. Note that even when this option is set, you can still see those
663 names by explicitly typing a _ after the period and hitting <tab>:
598 names by explicitly typing a _ after the period and hitting <tab>:
664 'name._<tab>' will always complete attribute names starting with '_'.
599 'name._<tab>' will always complete attribute names starting with '_'.
665
600
666 This option is off by default so that new users see all
601 This option is off by default so that new users see all
667 attributes of any objects they are dealing with.
602 attributes of any objects they are dealing with.
668
603
669 You will find the default values along with a corresponding detailed
604 You will find the default values along with a corresponding detailed
670 explanation in your ipythonrc file.
605 explanation in your ipythonrc file.
671
606
672
607
673 Session logging and restoring
608 Session logging and restoring
674 -----------------------------
609 -----------------------------
675
610
676 You can log all input from a session either by starting IPython with the
611 You can log all input from a session either by starting IPython with the
677 command line switches -log or -logfile (see :ref:`here <command_line_options>`)
612 command line switches -log or -logfile (see :ref:`here <command_line_options>`)
678 or by activating the logging at any moment with the magic function %logstart.
613 or by activating the logging at any moment with the magic function %logstart.
679
614
680 Log files can later be reloaded with the -logplay option and IPython
615 Log files can later be reloaded with the -logplay option and IPython
681 will attempt to 'replay' the log by executing all the lines in it, thus
616 will attempt to 'replay' the log by executing all the lines in it, thus
682 restoring the state of a previous session. This feature is not quite
617 restoring the state of a previous session. This feature is not quite
683 perfect, but can still be useful in many cases.
618 perfect, but can still be useful in many cases.
684
619
685 The log files can also be used as a way to have a permanent record of
620 The log files can also be used as a way to have a permanent record of
686 any code you wrote while experimenting. Log files are regular text files
621 any code you wrote while experimenting. Log files are regular text files
687 which you can later open in your favorite text editor to extract code or
622 which you can later open in your favorite text editor to extract code or
688 to 'clean them up' before using them to replay a session.
623 to 'clean them up' before using them to replay a session.
689
624
690 The %logstart function for activating logging in mid-session is used as
625 The %logstart function for activating logging in mid-session is used as
691 follows:
626 follows:
692
627
693 %logstart [log_name [log_mode]]
628 %logstart [log_name [log_mode]]
694
629
695 If no name is given, it defaults to a file named 'log' in your
630 If no name is given, it defaults to a file named 'log' in your
696 IPYTHONDIR directory, in 'rotate' mode (see below).
631 IPYTHONDIR directory, in 'rotate' mode (see below).
697
632
698 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
633 '%logstart name' saves to file 'name' in 'backup' mode. It saves your
699 history up to that point and then continues logging.
634 history up to that point and then continues logging.
700
635
701 %logstart takes a second optional parameter: logging mode. This can be
636 %logstart takes a second optional parameter: logging mode. This can be
702 one of (note that the modes are given unquoted):
637 one of (note that the modes are given unquoted):
703
638
704 * [over:] overwrite existing log_name.
639 * [over:] overwrite existing log_name.
705 * [backup:] rename (if exists) to log_name~ and start log_name.
640 * [backup:] rename (if exists) to log_name~ and start log_name.
706 * [append:] well, that says it.
641 * [append:] well, that says it.
707 * [rotate:] create rotating logs log_name.1~, log_name.2~, etc.
642 * [rotate:] create rotating logs log_name.1~, log_name.2~, etc.
708
643
709 The %logoff and %logon functions allow you to temporarily stop and
644 The %logoff and %logon functions allow you to temporarily stop and
710 resume logging to a file which had previously been started with
645 resume logging to a file which had previously been started with
711 %logstart. They will fail (with an explanation) if you try to use them
646 %logstart. They will fail (with an explanation) if you try to use them
712 before logging has been started.
647 before logging has been started.
713
648
714 .. _system_shell_access:
649 .. _system_shell_access:
715
650
716 System shell access
651 System shell access
717 -------------------
652 -------------------
718
653
719 Any input line beginning with a ! character is passed verbatim (minus
654 Any input line beginning with a ! character is passed verbatim (minus
720 the !, of course) to the underlying operating system. For example,
655 the !, of course) to the underlying operating system. For example,
721 typing !ls will run 'ls' in the current directory.
656 typing !ls will run 'ls' in the current directory.
722
657
723 Manual capture of command output
658 Manual capture of command output
724 --------------------------------
659 --------------------------------
725
660
726 If the input line begins with two exclamation marks, !!, the command is
661 If the input line begins with two exclamation marks, !!, the command is
727 executed but its output is captured and returned as a python list, split
662 executed but its output is captured and returned as a python list, split
728 on newlines. Any output sent by the subprocess to standard error is
663 on newlines. Any output sent by the subprocess to standard error is
729 printed separately, so that the resulting list only captures standard
664 printed separately, so that the resulting list only captures standard
730 output. The !! syntax is a shorthand for the %sx magic command.
665 output. The !! syntax is a shorthand for the %sx magic command.
731
666
732 Finally, the %sc magic (short for 'shell capture') is similar to %sx,
667 Finally, the %sc magic (short for 'shell capture') is similar to %sx,
733 but allowing more fine-grained control of the capture details, and
668 but allowing more fine-grained control of the capture details, and
734 storing the result directly into a named variable. The direct use of
669 storing the result directly into a named variable. The direct use of
735 %sc is now deprecated, and you should ise the ``var = !cmd`` syntax
670 %sc is now deprecated, and you should ise the ``var = !cmd`` syntax
736 instead.
671 instead.
737
672
738 IPython also allows you to expand the value of python variables when
673 IPython also allows you to expand the value of python variables when
739 making system calls. Any python variable or expression which you prepend
674 making system calls. Any python variable or expression which you prepend
740 with $ will get expanded before the system call is made::
675 with $ will get expanded before the system call is made::
741
676
742 In [1]: pyvar='Hello world'
677 In [1]: pyvar='Hello world'
743 In [2]: !echo "A python variable: $pyvar"
678 In [2]: !echo "A python variable: $pyvar"
744 A python variable: Hello world
679 A python variable: Hello world
745
680
746 If you want the shell to actually see a literal $, you need to type it
681 If you want the shell to actually see a literal $, you need to type it
747 twice::
682 twice::
748
683
749 In [3]: !echo "A system variable: $$HOME"
684 In [3]: !echo "A system variable: $$HOME"
750 A system variable: /home/fperez
685 A system variable: /home/fperez
751
686
752 You can pass arbitrary expressions, though you'll need to delimit them
687 You can pass arbitrary expressions, though you'll need to delimit them
753 with {} if there is ambiguity as to the extent of the expression::
688 with {} if there is ambiguity as to the extent of the expression::
754
689
755 In [5]: x=10
690 In [5]: x=10
756 In [6]: y=20
691 In [6]: y=20
757 In [13]: !echo $x+y
692 In [13]: !echo $x+y
758 10+y
693 10+y
759 In [7]: !echo ${x+y}
694 In [7]: !echo ${x+y}
760 30
695 30
761
696
762 Even object attributes can be expanded::
697 Even object attributes can be expanded::
763
698
764 In [12]: !echo $sys.argv
699 In [12]: !echo $sys.argv
765 [/home/fperez/usr/bin/ipython]
700 [/home/fperez/usr/bin/ipython]
766
701
767
702
768 System command aliases
703 System command aliases
769 ----------------------
704 ----------------------
770
705
771 The %alias magic function and the alias option in the ipythonrc
706 The %alias magic function and the alias option in the ipythonrc
772 configuration file allow you to define magic functions which are in fact
707 configuration file allow you to define magic functions which are in fact
773 system shell commands. These aliases can have parameters.
708 system shell commands. These aliases can have parameters.
774
709
775 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
710 '%alias alias_name cmd' defines 'alias_name' as an alias for 'cmd'
776
711
777 Then, typing '%alias_name params' will execute the system command 'cmd
712 Then, typing '%alias_name params' will execute the system command 'cmd
778 params' (from your underlying operating system).
713 params' (from your underlying operating system).
779
714
780 You can also define aliases with parameters using %s specifiers (one per
715 You can also define aliases with parameters using %s specifiers (one per
781 parameter). The following example defines the %parts function as an
716 parameter). The following example defines the %parts function as an
782 alias to the command 'echo first %s second %s' where each %s will be
717 alias to the command 'echo first %s second %s' where each %s will be
783 replaced by a positional parameter to the call to %parts::
718 replaced by a positional parameter to the call to %parts::
784
719
785 In [1]: alias parts echo first %s second %s
720 In [1]: alias parts echo first %s second %s
786 In [2]: %parts A B
721 In [2]: %parts A B
787 first A second B
722 first A second B
788 In [3]: %parts A
723 In [3]: %parts A
789 Incorrect number of arguments: 2 expected.
724 Incorrect number of arguments: 2 expected.
790 parts is an alias to: 'echo first %s second %s'
725 parts is an alias to: 'echo first %s second %s'
791
726
792 If called with no parameters, %alias prints the table of currently
727 If called with no parameters, %alias prints the table of currently
793 defined aliases.
728 defined aliases.
794
729
795 The %rehash/rehashx magics allow you to load your entire $PATH as
730 The %rehash/rehashx magics allow you to load your entire $PATH as
796 ipython aliases. See their respective docstrings (or sec. 6.2
731 ipython aliases. See their respective docstrings (or sec. 6.2
797 <#sec:magic> for further details).
732 <#sec:magic> for further details).
798
733
799
734
800 .. _dreload:
735 .. _dreload:
801
736
802 Recursive reload
737 Recursive reload
803 ----------------
738 ----------------
804
739
805 The dreload function does a recursive reload of a module: changes made
740 The dreload function does a recursive reload of a module: changes made
806 to the module since you imported will actually be available without
741 to the module since you imported will actually be available without
807 having to exit.
742 having to exit.
808
743
809
744
810 Verbose and colored exception traceback printouts
745 Verbose and colored exception traceback printouts
811 -------------------------------------------------
746 -------------------------------------------------
812
747
813 IPython provides the option to see very detailed exception tracebacks,
748 IPython provides the option to see very detailed exception tracebacks,
814 which can be especially useful when debugging large programs. You can
749 which can be especially useful when debugging large programs. You can
815 run any Python file with the %run function to benefit from these
750 run any Python file with the %run function to benefit from these
816 detailed tracebacks. Furthermore, both normal and verbose tracebacks can
751 detailed tracebacks. Furthermore, both normal and verbose tracebacks can
817 be colored (if your terminal supports it) which makes them much easier
752 be colored (if your terminal supports it) which makes them much easier
818 to parse visually.
753 to parse visually.
819
754
820 See the magic xmode and colors functions for details (just type %magic).
755 See the magic xmode and colors functions for details (just type %magic).
821
756
822 These features are basically a terminal version of Ka-Ping Yee's cgitb
757 These features are basically a terminal version of Ka-Ping Yee's cgitb
823 module, now part of the standard Python library.
758 module, now part of the standard Python library.
824
759
825
760
826 .. _input_caching:
761 .. _input_caching:
827
762
828 Input caching system
763 Input caching system
829 --------------------
764 --------------------
830
765
831 IPython offers numbered prompts (In/Out) with input and output caching
766 IPython offers numbered prompts (In/Out) with input and output caching
832 (also referred to as 'input history'). All input is saved and can be
767 (also referred to as 'input history'). All input is saved and can be
833 retrieved as variables (besides the usual arrow key recall), in
768 retrieved as variables (besides the usual arrow key recall), in
834 addition to the %rep magic command that brings a history entry
769 addition to the %rep magic command that brings a history entry
835 up for editing on the next command line.
770 up for editing on the next command line.
836
771
837 The following GLOBAL variables always exist (so don't overwrite them!):
772 The following GLOBAL variables always exist (so don't overwrite them!):
838 _i: stores previous input. _ii: next previous. _iii: next-next previous.
773 _i: stores previous input. _ii: next previous. _iii: next-next previous.
839 _ih : a list of all input _ih[n] is the input from line n and this list
774 _ih : a list of all input _ih[n] is the input from line n and this list
840 is aliased to the global variable In. If you overwrite In with a
775 is aliased to the global variable In. If you overwrite In with a
841 variable of your own, you can remake the assignment to the internal list
776 variable of your own, you can remake the assignment to the internal list
842 with a simple 'In=_ih'.
777 with a simple 'In=_ih'.
843
778
844 Additionally, global variables named _i<n> are dynamically created (<n>
779 Additionally, global variables named _i<n> are dynamically created (<n>
845 being the prompt counter), such that
780 being the prompt counter), such that
846 _i<n> == _ih[<n>] == In[<n>].
781 _i<n> == _ih[<n>] == In[<n>].
847
782
848 For example, what you typed at prompt 14 is available as _i14, _ih[14]
783 For example, what you typed at prompt 14 is available as _i14, _ih[14]
849 and In[14].
784 and In[14].
850
785
851 This allows you to easily cut and paste multi line interactive prompts
786 This allows you to easily cut and paste multi line interactive prompts
852 by printing them out: they print like a clean string, without prompt
787 by printing them out: they print like a clean string, without prompt
853 characters. You can also manipulate them like regular variables (they
788 characters. You can also manipulate them like regular variables (they
854 are strings), modify or exec them (typing 'exec _i9' will re-execute the
789 are strings), modify or exec them (typing 'exec _i9' will re-execute the
855 contents of input prompt 9, 'exec In[9:14]+In[18]' will re-execute lines
790 contents of input prompt 9, 'exec In[9:14]+In[18]' will re-execute lines
856 9 through 13 and line 18).
791 9 through 13 and line 18).
857
792
858 You can also re-execute multiple lines of input easily by using the
793 You can also re-execute multiple lines of input easily by using the
859 magic %macro function (which automates the process and allows
794 magic %macro function (which automates the process and allows
860 re-execution without having to type 'exec' every time). The macro system
795 re-execution without having to type 'exec' every time). The macro system
861 also allows you to re-execute previous lines which include magic
796 also allows you to re-execute previous lines which include magic
862 function calls (which require special processing). Type %macro? or see
797 function calls (which require special processing). Type %macro? or see
863 sec. 6.2 <#sec:magic> for more details on the macro system.
798 sec. 6.2 <#sec:magic> for more details on the macro system.
864
799
865 A history function %hist allows you to see any part of your input
800 A history function %hist allows you to see any part of your input
866 history by printing a range of the _i variables.
801 history by printing a range of the _i variables.
867
802
868 You can also search ('grep') through your history by typing
803 You can also search ('grep') through your history by typing
869 '%hist -g somestring'. This also searches through the so called *shadow history*,
804 '%hist -g somestring'. This also searches through the so called *shadow history*,
870 which remembers all the commands (apart from multiline code blocks)
805 which remembers all the commands (apart from multiline code blocks)
871 you have ever entered. Handy for searching for svn/bzr URL's, IP adrresses
806 you have ever entered. Handy for searching for svn/bzr URL's, IP adrresses
872 etc. You can bring shadow history entries listed by '%hist -g' up for editing
807 etc. You can bring shadow history entries listed by '%hist -g' up for editing
873 (or re-execution by just pressing ENTER) with %rep command. Shadow history
808 (or re-execution by just pressing ENTER) with %rep command. Shadow history
874 entries are not available as _iNUMBER variables, and they are identified by
809 entries are not available as _iNUMBER variables, and they are identified by
875 the '0' prefix in %hist -g output. That is, history entry 12 is a normal
810 the '0' prefix in %hist -g output. That is, history entry 12 is a normal
876 history entry, but 0231 is a shadow history entry.
811 history entry, but 0231 is a shadow history entry.
877
812
878 Shadow history was added because the readline history is inherently very
813 Shadow history was added because the readline history is inherently very
879 unsafe - if you have multiple IPython sessions open, the last session
814 unsafe - if you have multiple IPython sessions open, the last session
880 to close will overwrite the history of previountly closed session. Likewise,
815 to close will overwrite the history of previountly closed session. Likewise,
881 if a crash occurs, history is never saved, whereas shadow history entries
816 if a crash occurs, history is never saved, whereas shadow history entries
882 are added after entering every command (so a command executed
817 are added after entering every command (so a command executed
883 in another IPython session is immediately available in other IPython
818 in another IPython session is immediately available in other IPython
884 sessions that are open).
819 sessions that are open).
885
820
886 To conserve space, a command can exist in shadow history only once - it doesn't
821 To conserve space, a command can exist in shadow history only once - it doesn't
887 make sense to store a common line like "cd .." a thousand times. The idea is
822 make sense to store a common line like "cd .." a thousand times. The idea is
888 mainly to provide a reliable place where valuable, hard-to-remember commands can
823 mainly to provide a reliable place where valuable, hard-to-remember commands can
889 always be retrieved, as opposed to providing an exact sequence of commands
824 always be retrieved, as opposed to providing an exact sequence of commands
890 you have entered in actual order.
825 you have entered in actual order.
891
826
892 Because shadow history has all the commands you have ever executed,
827 Because shadow history has all the commands you have ever executed,
893 time taken by %hist -g will increase oven time. If it ever starts to take
828 time taken by %hist -g will increase oven time. If it ever starts to take
894 too long (or it ends up containing sensitive information like passwords),
829 too long (or it ends up containing sensitive information like passwords),
895 clear the shadow history by `%clear shadow_nuke`.
830 clear the shadow history by `%clear shadow_nuke`.
896
831
897 Time taken to add entries to shadow history should be negligible, but
832 Time taken to add entries to shadow history should be negligible, but
898 in any case, if you start noticing performance degradation after using
833 in any case, if you start noticing performance degradation after using
899 IPython for a long time (or running a script that floods the shadow history!),
834 IPython for a long time (or running a script that floods the shadow history!),
900 you can 'compress' the shadow history by executing
835 you can 'compress' the shadow history by executing
901 `%clear shadow_compress`. In practice, this should never be necessary
836 `%clear shadow_compress`. In practice, this should never be necessary
902 in normal use.
837 in normal use.
903
838
904 .. _output_caching:
839 .. _output_caching:
905
840
906 Output caching system
841 Output caching system
907 ---------------------
842 ---------------------
908
843
909 For output that is returned from actions, a system similar to the input
844 For output that is returned from actions, a system similar to the input
910 cache exists but using _ instead of _i. Only actions that produce a
845 cache exists but using _ instead of _i. Only actions that produce a
911 result (NOT assignments, for example) are cached. If you are familiar
846 result (NOT assignments, for example) are cached. If you are familiar
912 with Mathematica, IPython's _ variables behave exactly like
847 with Mathematica, IPython's _ variables behave exactly like
913 Mathematica's % variables.
848 Mathematica's % variables.
914
849
915 The following GLOBAL variables always exist (so don't overwrite them!):
850 The following GLOBAL variables always exist (so don't overwrite them!):
916
851
917 * [_] (a single underscore) : stores previous output, like Python's
852 * [_] (a single underscore) : stores previous output, like Python's
918 default interpreter.
853 default interpreter.
919 * [__] (two underscores): next previous.
854 * [__] (two underscores): next previous.
920 * [___] (three underscores): next-next previous.
855 * [___] (three underscores): next-next previous.
921
856
922 Additionally, global variables named _<n> are dynamically created (<n>
857 Additionally, global variables named _<n> are dynamically created (<n>
923 being the prompt counter), such that the result of output <n> is always
858 being the prompt counter), such that the result of output <n> is always
924 available as _<n> (don't use the angle brackets, just the number, e.g.
859 available as _<n> (don't use the angle brackets, just the number, e.g.
925 _21).
860 _21).
926
861
927 These global variables are all stored in a global dictionary (not a
862 These global variables are all stored in a global dictionary (not a
928 list, since it only has entries for lines which returned a result)
863 list, since it only has entries for lines which returned a result)
929 available under the names _oh and Out (similar to _ih and In). So the
864 available under the names _oh and Out (similar to _ih and In). So the
930 output from line 12 can be obtained as _12, Out[12] or _oh[12]. If you
865 output from line 12 can be obtained as _12, Out[12] or _oh[12]. If you
931 accidentally overwrite the Out variable you can recover it by typing
866 accidentally overwrite the Out variable you can recover it by typing
932 'Out=_oh' at the prompt.
867 'Out=_oh' at the prompt.
933
868
934 This system obviously can potentially put heavy memory demands on your
869 This system obviously can potentially put heavy memory demands on your
935 system, since it prevents Python's garbage collector from removing any
870 system, since it prevents Python's garbage collector from removing any
936 previously computed results. You can control how many results are kept
871 previously computed results. You can control how many results are kept
937 in memory with the option (at the command line or in your ipythonrc
872 in memory with the option (at the command line or in your ipythonrc
938 file) cache_size. If you set it to 0, the whole system is completely
873 file) cache_size. If you set it to 0, the whole system is completely
939 disabled and the prompts revert to the classic '>>>' of normal Python.
874 disabled and the prompts revert to the classic '>>>' of normal Python.
940
875
941
876
942 Directory history
877 Directory history
943 -----------------
878 -----------------
944
879
945 Your history of visited directories is kept in the global list _dh, and
880 Your history of visited directories is kept in the global list _dh, and
946 the magic %cd command can be used to go to any entry in that list. The
881 the magic %cd command can be used to go to any entry in that list. The
947 %dhist command allows you to view this history. Do ``cd -<TAB`` to
882 %dhist command allows you to view this history. Do ``cd -<TAB`` to
948 conventiently view the directory history.
883 conventiently view the directory history.
949
884
950
885
951 Automatic parentheses and quotes
886 Automatic parentheses and quotes
952 --------------------------------
887 --------------------------------
953
888
954 These features were adapted from Nathan Gray's LazyPython. They are
889 These features were adapted from Nathan Gray's LazyPython. They are
955 meant to allow less typing for common situations.
890 meant to allow less typing for common situations.
956
891
957
892
958 Automatic parentheses
893 Automatic parentheses
959 ---------------------
894 ---------------------
960
895
961 Callable objects (i.e. functions, methods, etc) can be invoked like this
896 Callable objects (i.e. functions, methods, etc) can be invoked like this
962 (notice the commas between the arguments)::
897 (notice the commas between the arguments)::
963
898
964 >>> callable_ob arg1, arg2, arg3
899 >>> callable_ob arg1, arg2, arg3
965
900
966 and the input will be translated to this::
901 and the input will be translated to this::
967
902
968 -> callable_ob(arg1, arg2, arg3)
903 -> callable_ob(arg1, arg2, arg3)
969
904
970 You can force automatic parentheses by using '/' as the first character
905 You can force automatic parentheses by using '/' as the first character
971 of a line. For example::
906 of a line. For example::
972
907
973 >>> /globals # becomes 'globals()'
908 >>> /globals # becomes 'globals()'
974
909
975 Note that the '/' MUST be the first character on the line! This won't work::
910 Note that the '/' MUST be the first character on the line! This won't work::
976
911
977 >>> print /globals # syntax error
912 >>> print /globals # syntax error
978
913
979 In most cases the automatic algorithm should work, so you should rarely
914 In most cases the automatic algorithm should work, so you should rarely
980 need to explicitly invoke /. One notable exception is if you are trying
915 need to explicitly invoke /. One notable exception is if you are trying
981 to call a function with a list of tuples as arguments (the parenthesis
916 to call a function with a list of tuples as arguments (the parenthesis
982 will confuse IPython)::
917 will confuse IPython)::
983
918
984 In [1]: zip (1,2,3),(4,5,6) # won't work
919 In [1]: zip (1,2,3),(4,5,6) # won't work
985
920
986 but this will work::
921 but this will work::
987
922
988 In [2]: /zip (1,2,3),(4,5,6)
923 In [2]: /zip (1,2,3),(4,5,6)
989 ---> zip ((1,2,3),(4,5,6))
924 ---> zip ((1,2,3),(4,5,6))
990 Out[2]= [(1, 4), (2, 5), (3, 6)]
925 Out[2]= [(1, 4), (2, 5), (3, 6)]
991
926
992 IPython tells you that it has altered your command line by displaying
927 IPython tells you that it has altered your command line by displaying
993 the new command line preceded by ->. e.g.::
928 the new command line preceded by ->. e.g.::
994
929
995 In [18]: callable list
930 In [18]: callable list
996 ----> callable (list)
931 ----> callable (list)
997
932
998
933
999 Automatic quoting
934 Automatic quoting
1000 -----------------
935 -----------------
1001
936
1002 You can force automatic quoting of a function's arguments by using ','
937 You can force automatic quoting of a function's arguments by using ','
1003 or ';' as the first character of a line. For example::
938 or ';' as the first character of a line. For example::
1004
939
1005 >>> ,my_function /home/me # becomes my_function("/home/me")
940 >>> ,my_function /home/me # becomes my_function("/home/me")
1006
941
1007 If you use ';' instead, the whole argument is quoted as a single string
942 If you use ';' instead, the whole argument is quoted as a single string
1008 (while ',' splits on whitespace)::
943 (while ',' splits on whitespace)::
1009
944
1010 >>> ,my_function a b c # becomes my_function("a","b","c")
945 >>> ,my_function a b c # becomes my_function("a","b","c")
1011
946
1012 >>> ;my_function a b c # becomes my_function("a b c")
947 >>> ;my_function a b c # becomes my_function("a b c")
1013
948
1014 Note that the ',' or ';' MUST be the first character on the line! This
949 Note that the ',' or ';' MUST be the first character on the line! This
1015 won't work::
950 won't work::
1016
951
1017 >>> x = ,my_function /home/me # syntax error
952 >>> x = ,my_function /home/me # syntax error
1018
953
1019 IPython as your default Python environment
954 IPython as your default Python environment
1020 ==========================================
955 ==========================================
1021
956
1022 Python honors the environment variable PYTHONSTARTUP and will execute at
957 Python honors the environment variable PYTHONSTARTUP and will execute at
1023 startup the file referenced by this variable. If you put at the end of
958 startup the file referenced by this variable. If you put at the end of
1024 this file the following two lines of code::
959 this file the following two lines of code::
1025
960
1026 import IPython
961 import IPython
1027 IPython.Shell.IPShell().mainloop(sys_exit=1)
962 IPython.Shell.IPShell().mainloop(sys_exit=1)
1028
963
1029 then IPython will be your working environment anytime you start Python.
964 then IPython will be your working environment anytime you start Python.
1030 The sys_exit=1 is needed to have IPython issue a call to sys.exit() when
965 The sys_exit=1 is needed to have IPython issue a call to sys.exit() when
1031 it finishes, otherwise you'll be back at the normal Python '>>>'
966 it finishes, otherwise you'll be back at the normal Python '>>>'
1032 prompt.
967 prompt.
1033
968
1034 This is probably useful to developers who manage multiple Python
969 This is probably useful to developers who manage multiple Python
1035 versions and don't want to have correspondingly multiple IPython
970 versions and don't want to have correspondingly multiple IPython
1036 versions. Note that in this mode, there is no way to pass IPython any
971 versions. Note that in this mode, there is no way to pass IPython any
1037 command-line options, as those are trapped first by Python itself.
972 command-line options, as those are trapped first by Python itself.
1038
973
1039 .. _Embedding:
974 .. _Embedding:
1040
975
1041 Embedding IPython
976 Embedding IPython
1042 =================
977 =================
1043
978
1044 It is possible to start an IPython instance inside your own Python
979 It is possible to start an IPython instance inside your own Python
1045 programs. This allows you to evaluate dynamically the state of your
980 programs. This allows you to evaluate dynamically the state of your
1046 code, operate with your variables, analyze them, etc. Note however that
981 code, operate with your variables, analyze them, etc. Note however that
1047 any changes you make to values while in the shell do not propagate back
982 any changes you make to values while in the shell do not propagate back
1048 to the running code, so it is safe to modify your values because you
983 to the running code, so it is safe to modify your values because you
1049 won't break your code in bizarre ways by doing so.
984 won't break your code in bizarre ways by doing so.
1050
985
1051 This feature allows you to easily have a fully functional python
986 This feature allows you to easily have a fully functional python
1052 environment for doing object introspection anywhere in your code with a
987 environment for doing object introspection anywhere in your code with a
1053 simple function call. In some cases a simple print statement is enough,
988 simple function call. In some cases a simple print statement is enough,
1054 but if you need to do more detailed analysis of a code fragment this
989 but if you need to do more detailed analysis of a code fragment this
1055 feature can be very valuable.
990 feature can be very valuable.
1056
991
1057 It can also be useful in scientific computing situations where it is
992 It can also be useful in scientific computing situations where it is
1058 common to need to do some automatic, computationally intensive part and
993 common to need to do some automatic, computationally intensive part and
1059 then stop to look at data, plots, etc.
994 then stop to look at data, plots, etc.
1060 Opening an IPython instance will give you full access to your data and
995 Opening an IPython instance will give you full access to your data and
1061 functions, and you can resume program execution once you are done with
996 functions, and you can resume program execution once you are done with
1062 the interactive part (perhaps to stop again later, as many times as
997 the interactive part (perhaps to stop again later, as many times as
1063 needed).
998 needed).
1064
999
1065 The following code snippet is the bare minimum you need to include in
1000 The following code snippet is the bare minimum you need to include in
1066 your Python programs for this to work (detailed examples follow later)::
1001 your Python programs for this to work (detailed examples follow later)::
1067
1002
1068 from IPython.Shell import IPShellEmbed
1003 from IPython.Shell import IPShellEmbed
1069
1004
1070 ipshell = IPShellEmbed()
1005 ipshell = IPShellEmbed()
1071
1006
1072 ipshell() # this call anywhere in your program will start IPython
1007 ipshell() # this call anywhere in your program will start IPython
1073
1008
1074 You can run embedded instances even in code which is itself being run at
1009 You can run embedded instances even in code which is itself being run at
1075 the IPython interactive prompt with '%run <filename>'. Since it's easy
1010 the IPython interactive prompt with '%run <filename>'. Since it's easy
1076 to get lost as to where you are (in your top-level IPython or in your
1011 to get lost as to where you are (in your top-level IPython or in your
1077 embedded one), it's a good idea in such cases to set the in/out prompts
1012 embedded one), it's a good idea in such cases to set the in/out prompts
1078 to something different for the embedded instances. The code examples
1013 to something different for the embedded instances. The code examples
1079 below illustrate this.
1014 below illustrate this.
1080
1015
1081 You can also have multiple IPython instances in your program and open
1016 You can also have multiple IPython instances in your program and open
1082 them separately, for example with different options for data
1017 them separately, for example with different options for data
1083 presentation. If you close and open the same instance multiple times,
1018 presentation. If you close and open the same instance multiple times,
1084 its prompt counters simply continue from each execution to the next.
1019 its prompt counters simply continue from each execution to the next.
1085
1020
1086 Please look at the docstrings in the Shell.py module for more details on
1021 Please look at the docstrings in the Shell.py module for more details on
1087 the use of this system.
1022 the use of this system.
1088
1023
1089 The following sample file illustrating how to use the embedding
1024 The following sample file illustrating how to use the embedding
1090 functionality is provided in the examples directory as example-embed.py.
1025 functionality is provided in the examples directory as example-embed.py.
1091 It should be fairly self-explanatory::
1026 It should be fairly self-explanatory::
1092
1027
1093
1028
1094 #!/usr/bin/env python
1029 #!/usr/bin/env python
1095
1030
1096 """An example of how to embed an IPython shell into a running program.
1031 """An example of how to embed an IPython shell into a running program.
1097
1032
1098 Please see the documentation in the IPython.Shell module for more details.
1033 Please see the documentation in the IPython.Shell module for more details.
1099
1034
1100 The accompanying file example-embed-short.py has quick code fragments for
1035 The accompanying file example-embed-short.py has quick code fragments for
1101 embedding which you can cut and paste in your code once you understand how
1036 embedding which you can cut and paste in your code once you understand how
1102 things work.
1037 things work.
1103
1038
1104 The code in this file is deliberately extra-verbose, meant for learning."""
1039 The code in this file is deliberately extra-verbose, meant for learning."""
1105
1040
1106 # The basics to get you going:
1041 # The basics to get you going:
1107
1042
1108 # IPython sets the __IPYTHON__ variable so you can know if you have nested
1043 # IPython sets the __IPYTHON__ variable so you can know if you have nested
1109 # copies running.
1044 # copies running.
1110
1045
1111 # Try running this code both at the command line and from inside IPython (with
1046 # Try running this code both at the command line and from inside IPython (with
1112 # %run example-embed.py)
1047 # %run example-embed.py)
1113 try:
1048 try:
1114 __IPYTHON__
1049 __IPYTHON__
1115 except NameError:
1050 except NameError:
1116 nested = 0
1051 nested = 0
1117 args = ['']
1052 args = ['']
1118 else:
1053 else:
1119 print "Running nested copies of IPython."
1054 print "Running nested copies of IPython."
1120 print "The prompts for the nested copy have been modified"
1055 print "The prompts for the nested copy have been modified"
1121 nested = 1
1056 nested = 1
1122 # what the embedded instance will see as sys.argv:
1057 # what the embedded instance will see as sys.argv:
1123 args = ['-pi1','In <\\#>: ','-pi2',' .\\D.: ',
1058 args = ['-pi1','In <\\#>: ','-pi2',' .\\D.: ',
1124 '-po','Out<\\#>: ','-nosep']
1059 '-po','Out<\\#>: ','-nosep']
1125
1060
1126 # First import the embeddable shell class
1061 # First import the embeddable shell class
1127 from IPython.Shell import IPShellEmbed
1062 from IPython.Shell import IPShellEmbed
1128
1063
1129 # Now create an instance of the embeddable shell. The first argument is a
1064 # Now create an instance of the embeddable shell. The first argument is a
1130 # string with options exactly as you would type them if you were starting
1065 # string with options exactly as you would type them if you were starting
1131 # IPython at the system command line. Any parameters you want to define for
1066 # IPython at the system command line. Any parameters you want to define for
1132 # configuration can thus be specified here.
1067 # configuration can thus be specified here.
1133 ipshell = IPShellEmbed(args,
1068 ipshell = IPShellEmbed(args,
1134 banner = 'Dropping into IPython',
1069 banner = 'Dropping into IPython',
1135 exit_msg = 'Leaving Interpreter, back to program.')
1070 exit_msg = 'Leaving Interpreter, back to program.')
1136
1071
1137 # Make a second instance, you can have as many as you want.
1072 # Make a second instance, you can have as many as you want.
1138 if nested:
1073 if nested:
1139 args[1] = 'In2<\\#>'
1074 args[1] = 'In2<\\#>'
1140 else:
1075 else:
1141 args = ['-pi1','In2<\\#>: ','-pi2',' .\\D.: ',
1076 args = ['-pi1','In2<\\#>: ','-pi2',' .\\D.: ',
1142 '-po','Out<\\#>: ','-nosep']
1077 '-po','Out<\\#>: ','-nosep']
1143 ipshell2 = IPShellEmbed(args,banner = 'Second IPython instance.')
1078 ipshell2 = IPShellEmbed(args,banner = 'Second IPython instance.')
1144
1079
1145 print '\nHello. This is printed from the main controller program.\n'
1080 print '\nHello. This is printed from the main controller program.\n'
1146
1081
1147 # You can then call ipshell() anywhere you need it (with an optional
1082 # You can then call ipshell() anywhere you need it (with an optional
1148 # message):
1083 # message):
1149 ipshell('***Called from top level. '
1084 ipshell('***Called from top level. '
1150 'Hit Ctrl-D to exit interpreter and continue program.\n'
1085 'Hit Ctrl-D to exit interpreter and continue program.\n'
1151 'Note that if you use %kill_embedded, you can fully deactivate\n'
1086 'Note that if you use %kill_embedded, you can fully deactivate\n'
1152 'This embedded instance so it will never turn on again')
1087 'This embedded instance so it will never turn on again')
1153
1088
1154 print '\nBack in caller program, moving along...\n'
1089 print '\nBack in caller program, moving along...\n'
1155
1090
1156 #---------------------------------------------------------------------------
1091 #---------------------------------------------------------------------------
1157 # More details:
1092 # More details:
1158
1093
1159 # IPShellEmbed instances don't print the standard system banner and
1094 # IPShellEmbed instances don't print the standard system banner and
1160 # messages. The IPython banner (which actually may contain initialization
1095 # messages. The IPython banner (which actually may contain initialization
1161 # messages) is available as <instance>.IP.BANNER in case you want it.
1096 # messages) is available as <instance>.IP.BANNER in case you want it.
1162
1097
1163 # IPShellEmbed instances print the following information everytime they
1098 # IPShellEmbed instances print the following information everytime they
1164 # start:
1099 # start:
1165
1100
1166 # - A global startup banner.
1101 # - A global startup banner.
1167
1102
1168 # - A call-specific header string, which you can use to indicate where in the
1103 # - A call-specific header string, which you can use to indicate where in the
1169 # execution flow the shell is starting.
1104 # execution flow the shell is starting.
1170
1105
1171 # They also print an exit message every time they exit.
1106 # They also print an exit message every time they exit.
1172
1107
1173 # Both the startup banner and the exit message default to None, and can be set
1108 # Both the startup banner and the exit message default to None, and can be set
1174 # either at the instance constructor or at any other time with the
1109 # either at the instance constructor or at any other time with the
1175 # set_banner() and set_exit_msg() methods.
1110 # set_banner() and set_exit_msg() methods.
1176
1111
1177 # The shell instance can be also put in 'dummy' mode globally or on a per-call
1112 # The shell instance can be also put in 'dummy' mode globally or on a per-call
1178 # basis. This gives you fine control for debugging without having to change
1113 # basis. This gives you fine control for debugging without having to change
1179 # code all over the place.
1114 # code all over the place.
1180
1115
1181 # The code below illustrates all this.
1116 # The code below illustrates all this.
1182
1117
1183
1118
1184 # This is how the global banner and exit_msg can be reset at any point
1119 # This is how the global banner and exit_msg can be reset at any point
1185 ipshell.set_banner('Entering interpreter - New Banner')
1120 ipshell.set_banner('Entering interpreter - New Banner')
1186 ipshell.set_exit_msg('Leaving interpreter - New exit_msg')
1121 ipshell.set_exit_msg('Leaving interpreter - New exit_msg')
1187
1122
1188 def foo(m):
1123 def foo(m):
1189 s = 'spam'
1124 s = 'spam'
1190 ipshell('***In foo(). Try @whos, or print s or m:')
1125 ipshell('***In foo(). Try @whos, or print s or m:')
1191 print 'foo says m = ',m
1126 print 'foo says m = ',m
1192
1127
1193 def bar(n):
1128 def bar(n):
1194 s = 'eggs'
1129 s = 'eggs'
1195 ipshell('***In bar(). Try @whos, or print s or n:')
1130 ipshell('***In bar(). Try @whos, or print s or n:')
1196 print 'bar says n = ',n
1131 print 'bar says n = ',n
1197
1132
1198 # Some calls to the above functions which will trigger IPython:
1133 # Some calls to the above functions which will trigger IPython:
1199 print 'Main program calling foo("eggs")\n'
1134 print 'Main program calling foo("eggs")\n'
1200 foo('eggs')
1135 foo('eggs')
1201
1136
1202 # The shell can be put in 'dummy' mode where calls to it silently return. This
1137 # The shell can be put in 'dummy' mode where calls to it silently return. This
1203 # allows you, for example, to globally turn off debugging for a program with a
1138 # allows you, for example, to globally turn off debugging for a program with a
1204 # single call.
1139 # single call.
1205 ipshell.set_dummy_mode(1)
1140 ipshell.set_dummy_mode(1)
1206 print '\nTrying to call IPython which is now "dummy":'
1141 print '\nTrying to call IPython which is now "dummy":'
1207 ipshell()
1142 ipshell()
1208 print 'Nothing happened...'
1143 print 'Nothing happened...'
1209 # The global 'dummy' mode can still be overridden for a single call
1144 # The global 'dummy' mode can still be overridden for a single call
1210 print '\nOverriding dummy mode manually:'
1145 print '\nOverriding dummy mode manually:'
1211 ipshell(dummy=0)
1146 ipshell(dummy=0)
1212
1147
1213 # Reactivate the IPython shell
1148 # Reactivate the IPython shell
1214 ipshell.set_dummy_mode(0)
1149 ipshell.set_dummy_mode(0)
1215
1150
1216 print 'You can even have multiple embedded instances:'
1151 print 'You can even have multiple embedded instances:'
1217 ipshell2()
1152 ipshell2()
1218
1153
1219 print '\nMain program calling bar("spam")\n'
1154 print '\nMain program calling bar("spam")\n'
1220 bar('spam')
1155 bar('spam')
1221
1156
1222 print 'Main program finished. Bye!'
1157 print 'Main program finished. Bye!'
1223
1158
1224 #********************** End of file <example-embed.py> ***********************
1159 #********************** End of file <example-embed.py> ***********************
1225
1160
1226 Once you understand how the system functions, you can use the following
1161 Once you understand how the system functions, you can use the following
1227 code fragments in your programs which are ready for cut and paste::
1162 code fragments in your programs which are ready for cut and paste::
1228
1163
1229
1164
1230 """Quick code snippets for embedding IPython into other programs.
1165 """Quick code snippets for embedding IPython into other programs.
1231
1166
1232 See example-embed.py for full details, this file has the bare minimum code for
1167 See example-embed.py for full details, this file has the bare minimum code for
1233 cut and paste use once you understand how to use the system."""
1168 cut and paste use once you understand how to use the system."""
1234
1169
1235 #---------------------------------------------------------------------------
1170 #---------------------------------------------------------------------------
1236 # This code loads IPython but modifies a few things if it detects it's running
1171 # This code loads IPython but modifies a few things if it detects it's running
1237 # embedded in another IPython session (helps avoid confusion)
1172 # embedded in another IPython session (helps avoid confusion)
1238
1173
1239 try:
1174 try:
1240 __IPYTHON__
1175 __IPYTHON__
1241 except NameError:
1176 except NameError:
1242 argv = ['']
1177 argv = ['']
1243 banner = exit_msg = ''
1178 banner = exit_msg = ''
1244 else:
1179 else:
1245 # Command-line options for IPython (a list like sys.argv)
1180 # Command-line options for IPython (a list like sys.argv)
1246 argv = ['-pi1','In <\\#>:','-pi2',' .\\D.:','-po','Out<\\#>:']
1181 argv = ['-pi1','In <\\#>:','-pi2',' .\\D.:','-po','Out<\\#>:']
1247 banner = '*** Nested interpreter ***'
1182 banner = '*** Nested interpreter ***'
1248 exit_msg = '*** Back in main IPython ***'
1183 exit_msg = '*** Back in main IPython ***'
1249
1184
1250 # First import the embeddable shell class
1185 # First import the embeddable shell class
1251 from IPython.Shell import IPShellEmbed
1186 from IPython.Shell import IPShellEmbed
1252 # Now create the IPython shell instance. Put ipshell() anywhere in your code
1187 # Now create the IPython shell instance. Put ipshell() anywhere in your code
1253 # where you want it to open.
1188 # where you want it to open.
1254 ipshell = IPShellEmbed(argv,banner=banner,exit_msg=exit_msg)
1189 ipshell = IPShellEmbed(argv,banner=banner,exit_msg=exit_msg)
1255
1190
1256 #---------------------------------------------------------------------------
1191 #---------------------------------------------------------------------------
1257 # This code will load an embeddable IPython shell always with no changes for
1192 # This code will load an embeddable IPython shell always with no changes for
1258 # nested embededings.
1193 # nested embededings.
1259
1194
1260 from IPython.Shell import IPShellEmbed
1195 from IPython.Shell import IPShellEmbed
1261 ipshell = IPShellEmbed()
1196 ipshell = IPShellEmbed()
1262 # Now ipshell() will open IPython anywhere in the code.
1197 # Now ipshell() will open IPython anywhere in the code.
1263
1198
1264 #---------------------------------------------------------------------------
1199 #---------------------------------------------------------------------------
1265 # This code loads an embeddable shell only if NOT running inside
1200 # This code loads an embeddable shell only if NOT running inside
1266 # IPython. Inside IPython, the embeddable shell variable ipshell is just a
1201 # IPython. Inside IPython, the embeddable shell variable ipshell is just a
1267 # dummy function.
1202 # dummy function.
1268
1203
1269 try:
1204 try:
1270 __IPYTHON__
1205 __IPYTHON__
1271 except NameError:
1206 except NameError:
1272 from IPython.Shell import IPShellEmbed
1207 from IPython.Shell import IPShellEmbed
1273 ipshell = IPShellEmbed()
1208 ipshell = IPShellEmbed()
1274 # Now ipshell() will open IPython anywhere in the code
1209 # Now ipshell() will open IPython anywhere in the code
1275 else:
1210 else:
1276 # Define a dummy ipshell() so the same code doesn't crash inside an
1211 # Define a dummy ipshell() so the same code doesn't crash inside an
1277 # interactive IPython
1212 # interactive IPython
1278 def ipshell(): pass
1213 def ipshell(): pass
1279
1214
1280 #******************* End of file <example-embed-short.py> ********************
1215 #******************* End of file <example-embed-short.py> ********************
1281
1216
1282 Using the Python debugger (pdb)
1217 Using the Python debugger (pdb)
1283 ===============================
1218 ===============================
1284
1219
1285 Running entire programs via pdb
1220 Running entire programs via pdb
1286 -------------------------------
1221 -------------------------------
1287
1222
1288 pdb, the Python debugger, is a powerful interactive debugger which
1223 pdb, the Python debugger, is a powerful interactive debugger which
1289 allows you to step through code, set breakpoints, watch variables,
1224 allows you to step through code, set breakpoints, watch variables,
1290 etc. IPython makes it very easy to start any script under the control
1225 etc. IPython makes it very easy to start any script under the control
1291 of pdb, regardless of whether you have wrapped it into a 'main()'
1226 of pdb, regardless of whether you have wrapped it into a 'main()'
1292 function or not. For this, simply type '%run -d myscript' at an
1227 function or not. For this, simply type '%run -d myscript' at an
1293 IPython prompt. See the %run command's documentation (via '%run?' or
1228 IPython prompt. See the %run command's documentation (via '%run?' or
1294 in Sec. magic_ for more details, including how to control where pdb
1229 in Sec. magic_ for more details, including how to control where pdb
1295 will stop execution first.
1230 will stop execution first.
1296
1231
1297 For more information on the use of the pdb debugger, read the included
1232 For more information on the use of the pdb debugger, read the included
1298 pdb.doc file (part of the standard Python distribution). On a stock
1233 pdb.doc file (part of the standard Python distribution). On a stock
1299 Linux system it is located at /usr/lib/python2.3/pdb.doc, but the
1234 Linux system it is located at /usr/lib/python2.3/pdb.doc, but the
1300 easiest way to read it is by using the help() function of the pdb module
1235 easiest way to read it is by using the help() function of the pdb module
1301 as follows (in an IPython prompt):
1236 as follows (in an IPython prompt):
1302
1237
1303 In [1]: import pdb
1238 In [1]: import pdb
1304 In [2]: pdb.help()
1239 In [2]: pdb.help()
1305
1240
1306 This will load the pdb.doc document in a file viewer for you automatically.
1241 This will load the pdb.doc document in a file viewer for you automatically.
1307
1242
1308
1243
1309 Automatic invocation of pdb on exceptions
1244 Automatic invocation of pdb on exceptions
1310 -----------------------------------------
1245 -----------------------------------------
1311
1246
1312 IPython, if started with the -pdb option (or if the option is set in
1247 IPython, if started with the -pdb option (or if the option is set in
1313 your rc file) can call the Python pdb debugger every time your code
1248 your rc file) can call the Python pdb debugger every time your code
1314 triggers an uncaught exception. This feature
1249 triggers an uncaught exception. This feature
1315 can also be toggled at any time with the %pdb magic command. This can be
1250 can also be toggled at any time with the %pdb magic command. This can be
1316 extremely useful in order to find the origin of subtle bugs, because pdb
1251 extremely useful in order to find the origin of subtle bugs, because pdb
1317 opens up at the point in your code which triggered the exception, and
1252 opens up at the point in your code which triggered the exception, and
1318 while your program is at this point 'dead', all the data is still
1253 while your program is at this point 'dead', all the data is still
1319 available and you can walk up and down the stack frame and understand
1254 available and you can walk up and down the stack frame and understand
1320 the origin of the problem.
1255 the origin of the problem.
1321
1256
1322 Furthermore, you can use these debugging facilities both with the
1257 Furthermore, you can use these debugging facilities both with the
1323 embedded IPython mode and without IPython at all. For an embedded shell
1258 embedded IPython mode and without IPython at all. For an embedded shell
1324 (see sec. Embedding_), simply call the constructor with
1259 (see sec. Embedding_), simply call the constructor with
1325 '-pdb' in the argument string and automatically pdb will be called if an
1260 '-pdb' in the argument string and automatically pdb will be called if an
1326 uncaught exception is triggered by your code.
1261 uncaught exception is triggered by your code.
1327
1262
1328 For stand-alone use of the feature in your programs which do not use
1263 For stand-alone use of the feature in your programs which do not use
1329 IPython at all, put the following lines toward the top of your 'main'
1264 IPython at all, put the following lines toward the top of your 'main'
1330 routine::
1265 routine::
1331
1266
1332 import sys
1267 import sys
1333 from IPython.core import ultratb
1268 from IPython.core import ultratb
1334 sys.excepthook = ultratb.FormattedTB(mode='Verbose',
1269 sys.excepthook = ultratb.FormattedTB(mode='Verbose',
1335 color_scheme='Linux', call_pdb=1)
1270 color_scheme='Linux', call_pdb=1)
1336
1271
1337 The mode keyword can be either 'Verbose' or 'Plain', giving either very
1272 The mode keyword can be either 'Verbose' or 'Plain', giving either very
1338 detailed or normal tracebacks respectively. The color_scheme keyword can
1273 detailed or normal tracebacks respectively. The color_scheme keyword can
1339 be one of 'NoColor', 'Linux' (default) or 'LightBG'. These are the same
1274 be one of 'NoColor', 'Linux' (default) or 'LightBG'. These are the same
1340 options which can be set in IPython with -colors and -xmode.
1275 options which can be set in IPython with -colors and -xmode.
1341
1276
1342 This will give any of your programs detailed, colored tracebacks with
1277 This will give any of your programs detailed, colored tracebacks with
1343 automatic invocation of pdb.
1278 automatic invocation of pdb.
1344
1279
1345
1280
1346 Extensions for syntax processing
1281 Extensions for syntax processing
1347 ================================
1282 ================================
1348
1283
1349 This isn't for the faint of heart, because the potential for breaking
1284 This isn't for the faint of heart, because the potential for breaking
1350 things is quite high. But it can be a very powerful and useful feature.
1285 things is quite high. But it can be a very powerful and useful feature.
1351 In a nutshell, you can redefine the way IPython processes the user input
1286 In a nutshell, you can redefine the way IPython processes the user input
1352 line to accept new, special extensions to the syntax without needing to
1287 line to accept new, special extensions to the syntax without needing to
1353 change any of IPython's own code.
1288 change any of IPython's own code.
1354
1289
1355 In the IPython/extensions directory you will find some examples
1290 In the IPython/extensions directory you will find some examples
1356 supplied, which we will briefly describe now. These can be used 'as is'
1291 supplied, which we will briefly describe now. These can be used 'as is'
1357 (and both provide very useful functionality), or you can use them as a
1292 (and both provide very useful functionality), or you can use them as a
1358 starting point for writing your own extensions.
1293 starting point for writing your own extensions.
1359
1294
1360
1295
1361 Pasting of code starting with '>>> ' or '... '
1296 Pasting of code starting with '>>> ' or '... '
1362 ----------------------------------------------
1297 ----------------------------------------------
1363
1298
1364 In the python tutorial it is common to find code examples which have
1299 In the python tutorial it is common to find code examples which have
1365 been taken from real python sessions. The problem with those is that all
1300 been taken from real python sessions. The problem with those is that all
1366 the lines begin with either '>>> ' or '... ', which makes it impossible
1301 the lines begin with either '>>> ' or '... ', which makes it impossible
1367 to paste them all at once. One must instead do a line by line manual
1302 to paste them all at once. One must instead do a line by line manual
1368 copying, carefully removing the leading extraneous characters.
1303 copying, carefully removing the leading extraneous characters.
1369
1304
1370 This extension identifies those starting characters and removes them
1305 This extension identifies those starting characters and removes them
1371 from the input automatically, so that one can paste multi-line examples
1306 from the input automatically, so that one can paste multi-line examples
1372 directly into IPython, saving a lot of time. Please look at the file
1307 directly into IPython, saving a lot of time. Please look at the file
1373 InterpreterPasteInput.py in the IPython/extensions directory for details
1308 InterpreterPasteInput.py in the IPython/extensions directory for details
1374 on how this is done.
1309 on how this is done.
1375
1310
1376 IPython comes with a special profile enabling this feature, called
1311 IPython comes with a special profile enabling this feature, called
1377 tutorial. Simply start IPython via 'ipython -p tutorial' and the feature
1312 tutorial. Simply start IPython via 'ipython -p tutorial' and the feature
1378 will be available. In a normal IPython session you can activate the
1313 will be available. In a normal IPython session you can activate the
1379 feature by importing the corresponding module with:
1314 feature by importing the corresponding module with:
1380 In [1]: import IPython.extensions.InterpreterPasteInput
1315 In [1]: import IPython.extensions.InterpreterPasteInput
1381
1316
1382 The following is a 'screenshot' of how things work when this extension
1317 The following is a 'screenshot' of how things work when this extension
1383 is on, copying an example from the standard tutorial::
1318 is on, copying an example from the standard tutorial::
1384
1319
1385 IPython profile: tutorial
1320 IPython profile: tutorial
1386
1321
1387 *** Pasting of code with ">>>" or "..." has been enabled.
1322 *** Pasting of code with ">>>" or "..." has been enabled.
1388
1323
1389 In [1]: >>> def fib2(n): # return Fibonacci series up to n
1324 In [1]: >>> def fib2(n): # return Fibonacci series up to n
1390 ...: ... """Return a list containing the Fibonacci series up to
1325 ...: ... """Return a list containing the Fibonacci series up to
1391 n."""
1326 n."""
1392 ...: ... result = []
1327 ...: ... result = []
1393 ...: ... a, b = 0, 1
1328 ...: ... a, b = 0, 1
1394 ...: ... while b < n:
1329 ...: ... while b < n:
1395 ...: ... result.append(b) # see below
1330 ...: ... result.append(b) # see below
1396 ...: ... a, b = b, a+b
1331 ...: ... a, b = b, a+b
1397 ...: ... return result
1332 ...: ... return result
1398 ...:
1333 ...:
1399
1334
1400 In [2]: fib2(10)
1335 In [2]: fib2(10)
1401 Out[2]: [1, 1, 2, 3, 5, 8]
1336 Out[2]: [1, 1, 2, 3, 5, 8]
1402
1337
1403 Note that as currently written, this extension does not recognize
1338 Note that as currently written, this extension does not recognize
1404 IPython's prompts for pasting. Those are more complicated, since the
1339 IPython's prompts for pasting. Those are more complicated, since the
1405 user can change them very easily, they involve numbers and can vary in
1340 user can change them very easily, they involve numbers and can vary in
1406 length. One could however extract all the relevant information from the
1341 length. One could however extract all the relevant information from the
1407 IPython instance and build an appropriate regular expression. This is
1342 IPython instance and build an appropriate regular expression. This is
1408 left as an exercise for the reader.
1343 left as an exercise for the reader.
1409
1344
1410
1345
1411 Input of physical quantities with units
1346 Input of physical quantities with units
1412 ---------------------------------------
1347 ---------------------------------------
1413
1348
1414 The module PhysicalQInput allows a simplified form of input for physical
1349 The module PhysicalQInput allows a simplified form of input for physical
1415 quantities with units. This file is meant to be used in conjunction with
1350 quantities with units. This file is meant to be used in conjunction with
1416 the PhysicalQInteractive module (in the same directory) and
1351 the PhysicalQInteractive module (in the same directory) and
1417 Physics.PhysicalQuantities from Konrad Hinsen's ScientificPython
1352 Physics.PhysicalQuantities from Konrad Hinsen's ScientificPython
1418 (http://dirac.cnrs-orleans.fr/ScientificPython/).
1353 (http://dirac.cnrs-orleans.fr/ScientificPython/).
1419
1354
1420 The Physics.PhysicalQuantities module defines PhysicalQuantity objects,
1355 The Physics.PhysicalQuantities module defines PhysicalQuantity objects,
1421 but these must be declared as instances of a class. For example, to
1356 but these must be declared as instances of a class. For example, to
1422 define v as a velocity of 3 m/s, normally you would write::
1357 define v as a velocity of 3 m/s, normally you would write::
1423
1358
1424 In [1]: v = PhysicalQuantity(3,'m/s')
1359 In [1]: v = PhysicalQuantity(3,'m/s')
1425
1360
1426 Using the PhysicalQ_Input extension this can be input instead as:
1361 Using the PhysicalQ_Input extension this can be input instead as:
1427 In [1]: v = 3 m/s
1362 In [1]: v = 3 m/s
1428 which is much more convenient for interactive use (even though it is
1363 which is much more convenient for interactive use (even though it is
1429 blatantly invalid Python syntax).
1364 blatantly invalid Python syntax).
1430
1365
1431 The physics profile supplied with IPython (enabled via 'ipython -p
1366 The physics profile supplied with IPython (enabled via 'ipython -p
1432 physics') uses these extensions, which you can also activate with:
1367 physics') uses these extensions, which you can also activate with:
1433
1368
1434 from math import * # math MUST be imported BEFORE PhysicalQInteractive
1369 from math import * # math MUST be imported BEFORE PhysicalQInteractive
1435 from IPython.extensions.PhysicalQInteractive import *
1370 from IPython.extensions.PhysicalQInteractive import *
1436 import IPython.extensions.PhysicalQInput
1371 import IPython.extensions.PhysicalQInput
1437
1372
1373 .. _gui_support:
1438
1374
1439 Threading support
1375 GUI event loop support support
1440 =================
1376 ==============================
1377
1378 .. versionadded:: 0.11
1379 The ``%gui`` magic and :mod:`IPython.lib.inputhook`.
1380
1381 IPython has excellent support for working interactively with Graphical User
1382 Interface (GUI) toolkits, such as wxPython, PyQt4, PyGTK and Tk. This is
1383 implemented using Python's builtin ``PyOSInputHook`` hook. This implementation
1384 is extremely robust compared to our previous threaded based version. The
1385 advantages of
1386
1387 * GUIs can be enabled and disabled dynamically at runtime.
1388 * The active GUI can be switched dynamically at runtime.
1389 * In some cases, multiple GUIs can run simultaneously with no problems.
1390 * There is a developer API in :mod:`IPython.lib.inputhook` for customizing
1391 all of these things.
1392
1393 For users, enabling GUI event loop integration is simple. You simple use the
1394 ``%gui`` magic as follows::
1395
1396 %gui [-a] [GUINAME]
1397
1398 With no arguments, ``%gui`` removes all GUI support. Valid ``GUINAME``
1399 arguments are ``wx``, ``qt4``, ``gtk`` and ``tk``. The ``-a`` option will
1400 create and return a running application object for the selected GUI toolkit.
1401
1402 This to use wxPython interactively and create a running :class:`wx.App`
1403 object, do::
1404
1405 %gui -a wx
1406
1407 For information on IPython's Matplotlib integration (and the ``pylab`` mode)
1408 see :ref:`this section <matplotlib_support>`.
1441
1409
1442 WARNING: The threading support is still somewhat experimental, and it
1410 For developers that want to use IPython's GUI event loop integration in
1443 has only seen reasonable testing under Linux. Threaded code is
1411 the form of a library, the capabilities are exposed in library form
1444 particularly tricky to debug, and it tends to show extremely
1412 in the :mod:`IPython.lib.inputhook`. Interested developers should see the
1445 platform-dependent behavior. Since I only have access to Linux machines,
1413 module docstrings for more information.
1446 I will have to rely on user's experiences and assistance for this area
1414
1447 of IPython to improve under other platforms.
1415 .. _matplotlib_support:
1448
1416
1449 IPython, via the -gthread , -qthread, -q4thread and -wthread options
1417 Plotting with matplotlib
1450 (described in Sec. `Threading options`_), can run in
1418 ========================
1451 multithreaded mode to support pyGTK, Qt3, Qt4 and WXPython applications
1419
1452 respectively. These GUI toolkits need to control the python main loop of
1420
1453 execution, so under a normal Python interpreter, starting a pyGTK, Qt3,
1421 `Matplotlib`_ provides high quality 2D and
1454 Qt4 or WXPython application will immediately freeze the shell.
1422 3D plotting for Python. Matplotlib can produce plots on screen using a variety
1455
1423 of GUI toolkits, including Tk, PyGTK, PyQt4 and wxPython. It also provides a
1456 IPython, with one of these options (you can only use one at a time),
1424 number of commands useful for scientific computing, all with a syntax
1457 separates the graphical loop and IPython's code execution run into
1425 compatible with that of the popular Matlab program.
1458 different threads. This allows you to test interactively (with %run, for
1426
1459 example) your GUI code without blocking.
1427 Many IPython users have come to rely on IPython's ``-pylab`` mode which
1460
1428 automates the integration of Matplotlib with IPython. We are still in the
1461 A nice mini-tutorial on using IPython along with the Qt Designer
1429 process of working with the Matplotlib developers to finalize the new pylab
1462 application is available at the SciPy wiki:
1430 API, but for now you can use Matplotlib interactively using the following
1463 http://www.scipy.org/Cookbook/Matplotlib/Qt_with_IPython_and_Designer.
1431 commands::
1464
1432
1465
1433 %gui -a wx
1466 Tk issues
1434 import matplotlib
1467 ---------
1435 matplotlib.use('wxagg')
1468
1436 from matplotlib import pylab
1469 As indicated in Sec. `Threading options`_, a special -tk option is
1437 pylab.interactive(True)
1470 provided to try and allow Tk graphical applications to coexist
1438
1471 interactively with WX, Qt or GTK ones. Whether this works at all,
1439 All of this will soon be automated as Matplotlib beings to include
1472 however, is very platform and configuration dependent. Please
1440 new logic that uses our new GUI support.
1473 experiment with simple test cases before committing to using this
1474 combination of Tk and GTK/Qt/WX threading in a production environment.
1475
1476
1477 I/O pitfalls
1478 ------------
1479
1480 Be mindful that the Python interpreter switches between threads every
1481 $N$ bytecodes, where the default value as of Python 2.3 is $N=100.$ This
1482 value can be read by using the sys.getcheckinterval() function, and it
1483 can be reset via sys.setcheckinterval(N). This switching of threads can
1484 cause subtly confusing effects if one of your threads is doing file I/O.
1485 In text mode, most systems only flush file buffers when they encounter a
1486 '\n'. An instruction as simple as::
1487
1488 print >> filehandle, ''hello world''
1489
1490 actually consists of several bytecodes, so it is possible that the
1491 newline does not reach your file before the next thread switch.
1492 Similarly, if you are writing to a file in binary mode, the file won't
1493 be flushed until the buffer fills, and your other thread may see
1494 apparently truncated files.
1495
1496 For this reason, if you are using IPython's thread support and have (for
1497 example) a GUI application which will read data generated by files
1498 written to from the IPython thread, the safest approach is to open all
1499 of your files in unbuffered mode (the third argument to the file/open
1500 function is the buffering value)::
1501
1502 filehandle = open(filename,mode,0)
1503
1504 This is obviously a brute force way of avoiding race conditions with the
1505 file buffering. If you want to do it cleanly, and you have a resource
1506 which is being shared by the interactive IPython loop and your GUI
1507 thread, you should really handle it with thread locking and
1508 syncrhonization properties. The Python documentation discusses these.
1509
1441
1510 .. _interactive_demos:
1442 .. _interactive_demos:
1511
1443
1512 Interactive demos with IPython
1444 Interactive demos with IPython
1513 ==============================
1445 ==============================
1514
1446
1515 IPython ships with a basic system for running scripts interactively in
1447 IPython ships with a basic system for running scripts interactively in
1516 sections, useful when presenting code to audiences. A few tags embedded
1448 sections, useful when presenting code to audiences. A few tags embedded
1517 in comments (so that the script remains valid Python code) divide a file
1449 in comments (so that the script remains valid Python code) divide a file
1518 into separate blocks, and the demo can be run one block at a time, with
1450 into separate blocks, and the demo can be run one block at a time, with
1519 IPython printing (with syntax highlighting) the block before executing
1451 IPython printing (with syntax highlighting) the block before executing
1520 it, and returning to the interactive prompt after each block. The
1452 it, and returning to the interactive prompt after each block. The
1521 interactive namespace is updated after each block is run with the
1453 interactive namespace is updated after each block is run with the
1522 contents of the demo's namespace.
1454 contents of the demo's namespace.
1523
1455
1524 This allows you to show a piece of code, run it and then execute
1456 This allows you to show a piece of code, run it and then execute
1525 interactively commands based on the variables just created. Once you
1457 interactively commands based on the variables just created. Once you
1526 want to continue, you simply execute the next block of the demo. The
1458 want to continue, you simply execute the next block of the demo. The
1527 following listing shows the markup necessary for dividing a script into
1459 following listing shows the markup necessary for dividing a script into
1528 sections for execution as a demo::
1460 sections for execution as a demo::
1529
1461
1530
1462
1531 """A simple interactive demo to illustrate the use of IPython's Demo class.
1463 """A simple interactive demo to illustrate the use of IPython's Demo class.
1532
1464
1533 Any python script can be run as a demo, but that does little more than showing
1465 Any python script can be run as a demo, but that does little more than showing
1534 it on-screen, syntax-highlighted in one shot. If you add a little simple
1466 it on-screen, syntax-highlighted in one shot. If you add a little simple
1535 markup, you can stop at specified intervals and return to the ipython prompt,
1467 markup, you can stop at specified intervals and return to the ipython prompt,
1536 resuming execution later.
1468 resuming execution later.
1537 """
1469 """
1538
1470
1539 print 'Hello, welcome to an interactive IPython demo.'
1471 print 'Hello, welcome to an interactive IPython demo.'
1540 print 'Executing this block should require confirmation before proceeding,'
1472 print 'Executing this block should require confirmation before proceeding,'
1541 print 'unless auto_all has been set to true in the demo object'
1473 print 'unless auto_all has been set to true in the demo object'
1542
1474
1543 # The mark below defines a block boundary, which is a point where IPython will
1475 # The mark below defines a block boundary, which is a point where IPython will
1544 # stop execution and return to the interactive prompt.
1476 # stop execution and return to the interactive prompt.
1545 # Note that in actual interactive execution,
1477 # Note that in actual interactive execution,
1546 # <demo> --- stop ---
1478 # <demo> --- stop ---
1547
1479
1548 x = 1
1480 x = 1
1549 y = 2
1481 y = 2
1550
1482
1551 # <demo> --- stop ---
1483 # <demo> --- stop ---
1552
1484
1553 # the mark below makes this block as silent
1485 # the mark below makes this block as silent
1554 # <demo> silent
1486 # <demo> silent
1555
1487
1556 print 'This is a silent block, which gets executed but not printed.'
1488 print 'This is a silent block, which gets executed but not printed.'
1557
1489
1558 # <demo> --- stop ---
1490 # <demo> --- stop ---
1559 # <demo> auto
1491 # <demo> auto
1560 print 'This is an automatic block.'
1492 print 'This is an automatic block.'
1561 print 'It is executed without asking for confirmation, but printed.'
1493 print 'It is executed without asking for confirmation, but printed.'
1562 z = x+y
1494 z = x+y
1563
1495
1564 print 'z=',x
1496 print 'z=',x
1565
1497
1566 # <demo> --- stop ---
1498 # <demo> --- stop ---
1567 # This is just another normal block.
1499 # This is just another normal block.
1568 print 'z is now:', z
1500 print 'z is now:', z
1569
1501
1570 print 'bye!'
1502 print 'bye!'
1571
1503
1572 In order to run a file as a demo, you must first make a Demo object out
1504 In order to run a file as a demo, you must first make a Demo object out
1573 of it. If the file is named myscript.py, the following code will make a
1505 of it. If the file is named myscript.py, the following code will make a
1574 demo::
1506 demo::
1575
1507
1576 from IPython.demo import Demo
1508 from IPython.demo import Demo
1577
1509
1578 mydemo = Demo('myscript.py')
1510 mydemo = Demo('myscript.py')
1579
1511
1580 This creates the mydemo object, whose blocks you run one at a time by
1512 This creates the mydemo object, whose blocks you run one at a time by
1581 simply calling the object with no arguments. If you have autocall active
1513 simply calling the object with no arguments. If you have autocall active
1582 in IPython (the default), all you need to do is type::
1514 in IPython (the default), all you need to do is type::
1583
1515
1584 mydemo
1516 mydemo
1585
1517
1586 and IPython will call it, executing each block. Demo objects can be
1518 and IPython will call it, executing each block. Demo objects can be
1587 restarted, you can move forward or back skipping blocks, re-execute the
1519 restarted, you can move forward or back skipping blocks, re-execute the
1588 last block, etc. Simply use the Tab key on a demo object to see its
1520 last block, etc. Simply use the Tab key on a demo object to see its
1589 methods, and call '?' on them to see their docstrings for more usage
1521 methods, and call '?' on them to see their docstrings for more usage
1590 details. In addition, the demo module itself contains a comprehensive
1522 details. In addition, the demo module itself contains a comprehensive
1591 docstring, which you can access via::
1523 docstring, which you can access via::
1592
1524
1593 from IPython import demo
1525 from IPython import demo
1594
1526
1595 demo?
1527 demo?
1596
1528
1597 Limitations: It is important to note that these demos are limited to
1529 Limitations: It is important to note that these demos are limited to
1598 fairly simple uses. In particular, you can not put division marks in
1530 fairly simple uses. In particular, you can not put division marks in
1599 indented code (loops, if statements, function definitions, etc.)
1531 indented code (loops, if statements, function definitions, etc.)
1600 Supporting something like this would basically require tracking the
1532 Supporting something like this would basically require tracking the
1601 internal execution state of the Python interpreter, so only top-level
1533 internal execution state of the Python interpreter, so only top-level
1602 divisions are allowed. If you want to be able to open an IPython
1534 divisions are allowed. If you want to be able to open an IPython
1603 instance at an arbitrary point in a program, you can use IPython's
1535 instance at an arbitrary point in a program, you can use IPython's
1604 embedding facilities, described in detail in Sec. 9
1536 embedding facilities, described in detail in Sec. 9
1605
1537
1538 .. [Matplotlib] Matplotlib. http://matplotlib.sourceforge.net
1606
1539
1607 .. _Matplotlib support:
1608
1609 Plotting with matplotlib
1610 ========================
1611
1612 The matplotlib library (http://matplotlib.sourceforge.net
1613 http://matplotlib.sourceforge.net) provides high quality 2D plotting for
1614 Python. Matplotlib can produce plots on screen using a variety of GUI
1615 toolkits, including Tk, GTK and WXPython. It also provides a number of
1616 commands useful for scientific computing, all with a syntax compatible
1617 with that of the popular Matlab program.
1618
1619 IPython accepts the special option -pylab (see :ref:`here
1620 <command_line_options>`). This configures it to support matplotlib, honoring
1621 the settings in the .matplotlibrc file. IPython will detect the user's choice
1622 of matplotlib GUI backend, and automatically select the proper threading model
1623 to prevent blocking. It also sets matplotlib in interactive mode and modifies
1624 %run slightly, so that any matplotlib-based script can be executed using %run
1625 and the final show() command does not block the interactive shell.
1626
1627 The -pylab option must be given first in order for IPython to configure its
1628 threading mode. However, you can still issue other options afterwards. This
1629 allows you to have a matplotlib-based environment customized with additional
1630 modules using the standard IPython profile mechanism (see :ref:`here
1631 <profiles>`): ``ipython -pylab -p myprofile`` will load the profile defined in
1632 ipythonrc-myprofile after configuring matplotlib.
@@ -1,16 +1,15 b''
1 .. _parallel_index:
1 .. _parallel_index:
2
2
3 ====================================
3 ====================================
4 Using IPython for parallel computing
4 Using IPython for parallel computing
5 ====================================
5 ====================================
6
6
7 .. toctree::
7 .. toctree::
8 :maxdepth: 2
8 :maxdepth: 2
9
9
10 parallel_intro.txt
10 parallel_intro.txt
11 parallel_process.txt
11 parallel_process.txt
12 parallel_multiengine.txt
12 parallel_multiengine.txt
13 parallel_task.txt
13 parallel_task.txt
14 parallel_mpi.txt
14 parallel_mpi.txt
15 parallel_security.txt
15 parallel_security.txt
16 visionhpc.txt
@@ -1,205 +1,237 b''
1 .. _ip1par:
1 .. _ip1par:
2
2
3 ============================
3 ============================
4 Overview and getting started
4 Overview and getting started
5 ============================
5 ============================
6
6
7 Introduction
7 Introduction
8 ============
8 ============
9
9
10 This section gives an overview of IPython's sophisticated and powerful
10 This section gives an overview of IPython's sophisticated and powerful
11 architecture for parallel and distributed computing. This architecture
11 architecture for parallel and distributed computing. This architecture
12 abstracts out parallelism in a very general way, which enables IPython to
12 abstracts out parallelism in a very general way, which enables IPython to
13 support many different styles of parallelism including:
13 support many different styles of parallelism including:
14
14
15 * Single program, multiple data (SPMD) parallelism.
15 * Single program, multiple data (SPMD) parallelism.
16 * Multiple program, multiple data (MPMD) parallelism.
16 * Multiple program, multiple data (MPMD) parallelism.
17 * Message passing using MPI.
17 * Message passing using MPI.
18 * Task farming.
18 * Task farming.
19 * Data parallel.
19 * Data parallel.
20 * Combinations of these approaches.
20 * Combinations of these approaches.
21 * Custom user defined approaches.
21 * Custom user defined approaches.
22
22
23 Most importantly, IPython enables all types of parallel applications to
23 Most importantly, IPython enables all types of parallel applications to
24 be developed, executed, debugged and monitored *interactively*. Hence,
24 be developed, executed, debugged and monitored *interactively*. Hence,
25 the ``I`` in IPython. The following are some example usage cases for IPython:
25 the ``I`` in IPython. The following are some example usage cases for IPython:
26
26
27 * Quickly parallelize algorithms that are embarrassingly parallel
27 * Quickly parallelize algorithms that are embarrassingly parallel
28 using a number of simple approaches. Many simple things can be
28 using a number of simple approaches. Many simple things can be
29 parallelized interactively in one or two lines of code.
29 parallelized interactively in one or two lines of code.
30
30
31 * Steer traditional MPI applications on a supercomputer from an
31 * Steer traditional MPI applications on a supercomputer from an
32 IPython session on your laptop.
32 IPython session on your laptop.
33
33
34 * Analyze and visualize large datasets (that could be remote and/or
34 * Analyze and visualize large datasets (that could be remote and/or
35 distributed) interactively using IPython and tools like
35 distributed) interactively using IPython and tools like
36 matplotlib/TVTK.
36 matplotlib/TVTK.
37
37
38 * Develop, test and debug new parallel algorithms
38 * Develop, test and debug new parallel algorithms
39 (that may use MPI) interactively.
39 (that may use MPI) interactively.
40
40
41 * Tie together multiple MPI jobs running on different systems into
41 * Tie together multiple MPI jobs running on different systems into
42 one giant distributed and parallel system.
42 one giant distributed and parallel system.
43
43
44 * Start a parallel job on your cluster and then have a remote
44 * Start a parallel job on your cluster and then have a remote
45 collaborator connect to it and pull back data into their
45 collaborator connect to it and pull back data into their
46 local IPython session for plotting and analysis.
46 local IPython session for plotting and analysis.
47
47
48 * Run a set of tasks on a set of CPUs using dynamic load balancing.
48 * Run a set of tasks on a set of CPUs using dynamic load balancing.
49
49
50 Architecture overview
50 Architecture overview
51 =====================
51 =====================
52
52
53 The IPython architecture consists of three components:
53 The IPython architecture consists of three components:
54
54
55 * The IPython engine.
55 * The IPython engine.
56 * The IPython controller.
56 * The IPython controller.
57 * Various controller clients.
57 * Various controller clients.
58
58
59 These components live in the :mod:`IPython.kernel` package and are
59 These components live in the :mod:`IPython.kernel` package and are
60 installed with IPython. They do, however, have additional dependencies
60 installed with IPython. They do, however, have additional dependencies
61 that must be installed. For more information, see our
61 that must be installed. For more information, see our
62 :ref:`installation documentation <install_index>`.
62 :ref:`installation documentation <install_index>`.
63
63
64 IPython engine
64 IPython engine
65 ---------------
65 ---------------
66
66
67 The IPython engine is a Python instance that takes Python commands over a
67 The IPython engine is a Python instance that takes Python commands over a
68 network connection. Eventually, the IPython engine will be a full IPython
68 network connection. Eventually, the IPython engine will be a full IPython
69 interpreter, but for now, it is a regular Python interpreter. The engine
69 interpreter, but for now, it is a regular Python interpreter. The engine
70 can also handle incoming and outgoing Python objects sent over a network
70 can also handle incoming and outgoing Python objects sent over a network
71 connection. When multiple engines are started, parallel and distributed
71 connection. When multiple engines are started, parallel and distributed
72 computing becomes possible. An important feature of an IPython engine is
72 computing becomes possible. An important feature of an IPython engine is
73 that it blocks while user code is being executed. Read on for how the
73 that it blocks while user code is being executed. Read on for how the
74 IPython controller solves this problem to expose a clean asynchronous API
74 IPython controller solves this problem to expose a clean asynchronous API
75 to the user.
75 to the user.
76
76
77 IPython controller
77 IPython controller
78 ------------------
78 ------------------
79
79
80 The IPython controller provides an interface for working with a set of
80 The IPython controller provides an interface for working with a set of
81 engines. At an general level, the controller is a process to which
81 engines. At an general level, the controller is a process to which
82 IPython engines can connect. For each connected engine, the controller
82 IPython engines can connect. For each connected engine, the controller
83 manages a queue. All actions that can be performed on the engine go
83 manages a queue. All actions that can be performed on the engine go
84 through this queue. While the engines themselves block when user code is
84 through this queue. While the engines themselves block when user code is
85 run, the controller hides that from the user to provide a fully
85 run, the controller hides that from the user to provide a fully
86 asynchronous interface to a set of engines.
86 asynchronous interface to a set of engines.
87
87
88 .. note::
88 .. note::
89
89
90 Because the controller listens on a network port for engines to
90 Because the controller listens on a network port for engines to
91 connect to it, it must be started *before* any engines are started.
91 connect to it, it must be started *before* any engines are started.
92
92
93 The controller also provides a single point of contact for users who wish
93 The controller also provides a single point of contact for users who wish to
94 to utilize the engines connected to the controller. There are different
94 utilize the engines connected to the controller. There are different ways of
95 ways of working with a controller. In IPython these ways correspond to different interfaces that the controller is adapted to. Currently we have two default interfaces to the controller:
95 working with a controller. In IPython these ways correspond to different
96 interfaces that the controller is adapted to. Currently we have two default
97 interfaces to the controller:
96
98
97 * The MultiEngine interface, which provides the simplest possible way of
99 * The MultiEngine interface, which provides the simplest possible way of
98 working with engines interactively.
100 working with engines interactively.
99 * The Task interface, which provides presents the engines as a load balanced
101 * The Task interface, which presents the engines as a load balanced
100 task farming system.
102 task farming system.
101
103
102 Advanced users can easily add new custom interfaces to enable other
104 Advanced users can easily add new custom interfaces to enable other
103 styles of parallelism.
105 styles of parallelism.
104
106
105 .. note::
107 .. note::
106
108
107 A single controller and set of engines can be accessed
109 A single controller and set of engines can be accessed
108 through multiple interfaces simultaneously. This opens the
110 through multiple interfaces simultaneously. This opens the
109 door for lots of interesting things.
111 door for lots of interesting things.
110
112
111 Controller clients
113 Controller clients
112 ------------------
114 ------------------
113
115
114 For each controller interface, there is a corresponding client. These
116 For each controller interface, there is a corresponding client. These
115 clients allow users to interact with a set of engines through the
117 clients allow users to interact with a set of engines through the
116 interface. Here are the two default clients:
118 interface. Here are the two default clients:
117
119
118 * The :class:`MultiEngineClient` class.
120 * The :class:`MultiEngineClient` class.
119 * The :class:`TaskClient` class.
121 * The :class:`TaskClient` class.
120
122
121 Security
123 Security
122 --------
124 --------
123
125
124 By default (as long as `pyOpenSSL` is installed) all network connections between the controller and engines and the controller and clients are secure. What does this mean? First of all, all of the connections will be encrypted using SSL. Second, the connections are authenticated. We handle authentication in a capability based security model [Capability]_. In this model, a "capability (known in some systems as a key) is a communicable, unforgeable token of authority". Put simply, a capability is like a key to your house. If you have the key to your house, you can get in. If not, you can't.
126 By default (as long as `pyOpenSSL` is installed) all network connections
125
127 between the controller and engines and the controller and clients are secure.
126 In our architecture, the controller is the only process that listens on network ports, and is thus responsible to creating these keys. In IPython, these keys are known as Foolscap URLs, or FURLs, because of the underlying network protocol we are using. As a user, you don't need to know anything about the details of these FURLs, other than that when the controller starts, it saves a set of FURLs to files named :file:`something.furl`. The default location of these files is the :file:`~./ipython/security` directory.
128 What does this mean? First of all, all of the connections will be encrypted
127
129 using SSL. Second, the connections are authenticated. We handle authentication
128 To connect and authenticate to the controller an engine or client simply needs to present an appropriate FURL (that was originally created by the controller) to the controller. Thus, the FURL files need to be copied to a location where the clients and engines can find them. Typically, this is the :file:`~./ipython/security` directory on the host where the client/engine is running (which could be a different host than the controller). Once the FURL files are copied over, everything should work fine.
130 in a capability based security model [Capability]_. In this model, a
131 "capability (known in some systems as a key) is a communicable, unforgeable
132 token of authority". Put simply, a capability is like a key to your house. If
133 you have the key to your house, you can get in. If not, you can't.
134
135 In our architecture, the controller is the only process that listens on
136 network ports, and is thus responsible to creating these keys. In IPython,
137 these keys are known as Foolscap URLs, or FURLs, because of the underlying
138 network protocol we are using. As a user, you don't need to know anything
139 about the details of these FURLs, other than that when the controller starts,
140 it saves a set of FURLs to files named :file:`something.furl`. The default
141 location of these files is the :file:`~./ipython/security` directory.
142
143 To connect and authenticate to the controller an engine or client simply needs
144 to present an appropriate FURL (that was originally created by the controller)
145 to the controller. Thus, the FURL files need to be copied to a location where
146 the clients and engines can find them. Typically, this is the
147 :file:`~./ipython/security` directory on the host where the client/engine is
148 running (which could be a different host than the controller). Once the FURL
149 files are copied over, everything should work fine.
129
150
130 Currently, there are three FURL files that the controller creates:
151 Currently, there are three FURL files that the controller creates:
131
152
132 ipcontroller-engine.furl
153 ipcontroller-engine.furl
133 This FURL file is the key that gives an engine the ability to connect
154 This FURL file is the key that gives an engine the ability to connect
134 to a controller.
155 to a controller.
135
156
136 ipcontroller-tc.furl
157 ipcontroller-tc.furl
137 This FURL file is the key that a :class:`TaskClient` must use to
158 This FURL file is the key that a :class:`TaskClient` must use to
138 connect to the task interface of a controller.
159 connect to the task interface of a controller.
139
160
140 ipcontroller-mec.furl
161 ipcontroller-mec.furl
141 This FURL file is the key that a :class:`MultiEngineClient` must use
162 This FURL file is the key that a :class:`MultiEngineClient` must use
142 to connect to the multiengine interface of a controller.
163 to connect to the multiengine interface of a controller.
143
164
144 More details of how these FURL files are used are given below.
165 More details of how these FURL files are used are given below.
145
166
146 A detailed description of the security model and its implementation in IPython
167 A detailed description of the security model and its implementation in IPython
147 can be found :ref:`here <parallelsecurity>`.
168 can be found :ref:`here <parallelsecurity>`.
148
169
149 Getting Started
170 Getting Started
150 ===============
171 ===============
151
172
152 To use IPython for parallel computing, you need to start one instance of
173 To use IPython for parallel computing, you need to start one instance of the
153 the controller and one or more instances of the engine. Initially, it is best to simply start a controller and engines on a single host using the :command:`ipcluster` command. To start a controller and 4 engines on you localhost, just do::
174 controller and one or more instances of the engine. Initially, it is best to
175 simply start a controller and engines on a single host using the
176 :command:`ipcluster` command. To start a controller and 4 engines on your
177 localhost, just do::
154
178
155 $ ipcluster local -n 4
179 $ ipcluster local -n 4
156
180
157 More details about starting the IPython controller and engines can be found :ref:`here <parallel_process>`
181 More details about starting the IPython controller and engines can be found
182 :ref:`here <parallel_process>`
158
183
159 Once you have started the IPython controller and one or more engines, you
184 Once you have started the IPython controller and one or more engines, you
160 are ready to use the engines to do something useful. To make sure
185 are ready to use the engines to do something useful. To make sure
161 everything is working correctly, try the following commands:
186 everything is working correctly, try the following commands:
162
187
163 .. sourcecode:: ipython
188 .. sourcecode:: ipython
164
189
165 In [1]: from IPython.kernel import client
190 In [1]: from IPython.kernel import client
166
191
167 In [2]: mec = client.MultiEngineClient()
192 In [2]: mec = client.MultiEngineClient()
168
193
169 In [4]: mec.get_ids()
194 In [4]: mec.get_ids()
170 Out[4]: [0, 1, 2, 3]
195 Out[4]: [0, 1, 2, 3]
171
196
172 In [5]: mec.execute('print "Hello World"')
197 In [5]: mec.execute('print "Hello World"')
173 Out[5]:
198 Out[5]:
174 <Results List>
199 <Results List>
175 [0] In [1]: print "Hello World"
200 [0] In [1]: print "Hello World"
176 [0] Out[1]: Hello World
201 [0] Out[1]: Hello World
177
202
178 [1] In [1]: print "Hello World"
203 [1] In [1]: print "Hello World"
179 [1] Out[1]: Hello World
204 [1] Out[1]: Hello World
180
205
181 [2] In [1]: print "Hello World"
206 [2] In [1]: print "Hello World"
182 [2] Out[1]: Hello World
207 [2] Out[1]: Hello World
183
208
184 [3] In [1]: print "Hello World"
209 [3] In [1]: print "Hello World"
185 [3] Out[1]: Hello World
210 [3] Out[1]: Hello World
186
211
187 Remember, a client also needs to present a FURL file to the controller. How does this happen? When a multiengine client is created with no arguments, the client tries to find the corresponding FURL file in the local :file:`~./ipython/security` directory. If it finds it, you are set. If you have put the FURL file in a different location or it has a different name, create the client like this::
212 Remember, a client also needs to present a FURL file to the controller. How
213 does this happen? When a multiengine client is created with no arguments, the
214 client tries to find the corresponding FURL file in the local
215 :file:`~./ipython/security` directory. If it finds it, you are set. If you
216 have put the FURL file in a different location or it has a different name,
217 create the client like this::
188
218
189 mec = client.MultiEngineClient('/path/to/my/ipcontroller-mec.furl')
219 mec = client.MultiEngineClient('/path/to/my/ipcontroller-mec.furl')
190
220
191 Same thing hold true of creating a task client::
221 Same thing hold true of creating a task client::
192
222
193 tc = client.TaskClient('/path/to/my/ipcontroller-tc.furl')
223 tc = client.TaskClient('/path/to/my/ipcontroller-tc.furl')
194
224
195 You are now ready to learn more about the :ref:`MultiEngine <parallelmultiengine>` and :ref:`Task <paralleltask>` interfaces to the controller.
225 You are now ready to learn more about the :ref:`MultiEngine
226 <parallelmultiengine>` and :ref:`Task <paralleltask>` interfaces to the
227 controller.
196
228
197 .. note::
229 .. note::
198
230
199 Don't forget that the engine, multiengine client and task client all have
231 Don't forget that the engine, multiengine client and task client all have
200 *different* furl files. You must move *each* of these around to an
232 *different* furl files. You must move *each* of these around to an
201 appropriate location so that the engines and clients can use them to
233 appropriate location so that the engines and clients can use them to
202 connect to the controller.
234 connect to the controller.
203
235
204 .. [Capability] Capability-based security, http://en.wikipedia.org/wiki/Capability-based_security
236 .. [Capability] Capability-based security, http://en.wikipedia.org/wiki/Capability-based_security
205
237
@@ -1,157 +1,176 b''
1 .. _parallelmpi:
1 .. _parallelmpi:
2
2
3 =======================
3 =======================
4 Using MPI with IPython
4 Using MPI with IPython
5 =======================
5 =======================
6
6
7 Often, a parallel algorithm will require moving data between the engines. One way of accomplishing this is by doing a pull and then a push using the multiengine client. However, this will be slow as all the data has to go through the controller to the client and then back through the controller, to its final destination.
7 Often, a parallel algorithm will require moving data between the engines. One
8 way of accomplishing this is by doing a pull and then a push using the
9 multiengine client. However, this will be slow as all the data has to go
10 through the controller to the client and then back through the controller, to
11 its final destination.
8
12
9 A much better way of moving data between engines is to use a message passing library, such as the Message Passing Interface (MPI) [MPI]_. IPython's parallel computing architecture has been designed from the ground up to integrate with MPI. This document describes how to use MPI with IPython.
13 A much better way of moving data between engines is to use a message passing
14 library, such as the Message Passing Interface (MPI) [MPI]_. IPython's
15 parallel computing architecture has been designed from the ground up to
16 integrate with MPI. This document describes how to use MPI with IPython.
10
17
11 Additional installation requirements
18 Additional installation requirements
12 ====================================
19 ====================================
13
20
14 If you want to use MPI with IPython, you will need to install:
21 If you want to use MPI with IPython, you will need to install:
15
22
16 * A standard MPI implementation such as OpenMPI [OpenMPI]_ or MPICH.
23 * A standard MPI implementation such as OpenMPI [OpenMPI]_ or MPICH.
17 * The mpi4py [mpi4py]_ package.
24 * The mpi4py [mpi4py]_ package.
18
25
19 .. note::
26 .. note::
20
27
21 The mpi4py package is not a strict requirement. However, you need to
28 The mpi4py package is not a strict requirement. However, you need to
22 have *some* way of calling MPI from Python. You also need some way of
29 have *some* way of calling MPI from Python. You also need some way of
23 making sure that :func:`MPI_Init` is called when the IPython engines start
30 making sure that :func:`MPI_Init` is called when the IPython engines start
24 up. There are a number of ways of doing this and a good number of
31 up. There are a number of ways of doing this and a good number of
25 associated subtleties. We highly recommend just using mpi4py as it
32 associated subtleties. We highly recommend just using mpi4py as it
26 takes care of most of these problems. If you want to do something
33 takes care of most of these problems. If you want to do something
27 different, let us know and we can help you get started.
34 different, let us know and we can help you get started.
28
35
29 Starting the engines with MPI enabled
36 Starting the engines with MPI enabled
30 =====================================
37 =====================================
31
38
32 To use code that calls MPI, there are typically two things that MPI requires.
39 To use code that calls MPI, there are typically two things that MPI requires.
33
40
34 1. The process that wants to call MPI must be started using
41 1. The process that wants to call MPI must be started using
35 :command:`mpiexec` or a batch system (like PBS) that has MPI support.
42 :command:`mpiexec` or a batch system (like PBS) that has MPI support.
36 2. Once the process starts, it must call :func:`MPI_Init`.
43 2. Once the process starts, it must call :func:`MPI_Init`.
37
44
38 There are a couple of ways that you can start the IPython engines and get these things to happen.
45 There are a couple of ways that you can start the IPython engines and get
46 these things to happen.
39
47
40 Automatic starting using :command:`mpiexec` and :command:`ipcluster`
48 Automatic starting using :command:`mpiexec` and :command:`ipcluster`
41 --------------------------------------------------------------------
49 --------------------------------------------------------------------
42
50
43 The easiest approach is to use the `mpiexec` mode of :command:`ipcluster`, which will first start a controller and then a set of engines using :command:`mpiexec`::
51 The easiest approach is to use the `mpiexec` mode of :command:`ipcluster`,
52 which will first start a controller and then a set of engines using
53 :command:`mpiexec`::
44
54
45 $ ipcluster mpiexec -n 4
55 $ ipcluster mpiexec -n 4
46
56
47 This approach is best as interrupting :command:`ipcluster` will automatically
57 This approach is best as interrupting :command:`ipcluster` will automatically
48 stop and clean up the controller and engines.
58 stop and clean up the controller and engines.
49
59
50 Manual starting using :command:`mpiexec`
60 Manual starting using :command:`mpiexec`
51 ----------------------------------------
61 ----------------------------------------
52
62
53 If you want to start the IPython engines using the :command:`mpiexec`, just do::
63 If you want to start the IPython engines using the :command:`mpiexec`, just
64 do::
54
65
55 $ mpiexec -n 4 ipengine --mpi=mpi4py
66 $ mpiexec -n 4 ipengine --mpi=mpi4py
56
67
57 This requires that you already have a controller running and that the FURL
68 This requires that you already have a controller running and that the FURL
58 files for the engines are in place. We also have built in support for
69 files for the engines are in place. We also have built in support for
59 PyTrilinos [PyTrilinos]_, which can be used (assuming is installed) by
70 PyTrilinos [PyTrilinos]_, which can be used (assuming is installed) by
60 starting the engines with::
71 starting the engines with::
61
72
62 mpiexec -n 4 ipengine --mpi=pytrilinos
73 mpiexec -n 4 ipengine --mpi=pytrilinos
63
74
64 Automatic starting using PBS and :command:`ipcluster`
75 Automatic starting using PBS and :command:`ipcluster`
65 -----------------------------------------------------
76 -----------------------------------------------------
66
77
67 The :command:`ipcluster` command also has built-in integration with PBS. For more information on this approach, see our documentation on :ref:`ipcluster <parallel_process>`.
78 The :command:`ipcluster` command also has built-in integration with PBS. For
79 more information on this approach, see our documentation on :ref:`ipcluster
80 <parallel_process>`.
68
81
69 Actually using MPI
82 Actually using MPI
70 ==================
83 ==================
71
84
72 Once the engines are running with MPI enabled, you are ready to go. You can now call any code that uses MPI in the IPython engines. And, all of this can be done interactively. Here we show a simple example that uses mpi4py [mpi4py]_.
85 Once the engines are running with MPI enabled, you are ready to go. You can
86 now call any code that uses MPI in the IPython engines. And, all of this can
87 be done interactively. Here we show a simple example that uses mpi4py
88 [mpi4py]_.
73
89
74 First, lets define a simply function that uses MPI to calculate the sum of a distributed array. Save the following text in a file called :file:`psum.py`:
90 First, lets define a simply function that uses MPI to calculate the sum of a
91 distributed array. Save the following text in a file called :file:`psum.py`:
75
92
76 .. sourcecode:: python
93 .. sourcecode:: python
77
94
78 from mpi4py import MPI
95 from mpi4py import MPI
79 import numpy as np
96 import numpy as np
80
97
81 def psum(a):
98 def psum(a):
82 s = np.sum(a)
99 s = np.sum(a)
83 return MPI.COMM_WORLD.Allreduce(s,MPI.SUM)
100 return MPI.COMM_WORLD.Allreduce(s,MPI.SUM)
84
101
85 Now, start an IPython cluster in the same directory as :file:`psum.py`::
102 Now, start an IPython cluster in the same directory as :file:`psum.py`::
86
103
87 $ ipcluster mpiexec -n 4
104 $ ipcluster mpiexec -n 4
88
105
89 Finally, connect to the cluster and use this function interactively. In this case, we create a random array on each engine and sum up all the random arrays using our :func:`psum` function:
106 Finally, connect to the cluster and use this function interactively. In this
107 case, we create a random array on each engine and sum up all the random arrays
108 using our :func:`psum` function:
90
109
91 .. sourcecode:: ipython
110 .. sourcecode:: ipython
92
111
93 In [1]: from IPython.kernel import client
112 In [1]: from IPython.kernel import client
94
113
95 In [2]: mec = client.MultiEngineClient()
114 In [2]: mec = client.MultiEngineClient()
96
115
97 In [3]: mec.activate()
116 In [3]: mec.activate()
98
117
99 In [4]: px import numpy as np
118 In [4]: px import numpy as np
100 Parallel execution on engines: all
119 Parallel execution on engines: all
101 Out[4]:
120 Out[4]:
102 <Results List>
121 <Results List>
103 [0] In [13]: import numpy as np
122 [0] In [13]: import numpy as np
104 [1] In [13]: import numpy as np
123 [1] In [13]: import numpy as np
105 [2] In [13]: import numpy as np
124 [2] In [13]: import numpy as np
106 [3] In [13]: import numpy as np
125 [3] In [13]: import numpy as np
107
126
108 In [6]: px a = np.random.rand(100)
127 In [6]: px a = np.random.rand(100)
109 Parallel execution on engines: all
128 Parallel execution on engines: all
110 Out[6]:
129 Out[6]:
111 <Results List>
130 <Results List>
112 [0] In [15]: a = np.random.rand(100)
131 [0] In [15]: a = np.random.rand(100)
113 [1] In [15]: a = np.random.rand(100)
132 [1] In [15]: a = np.random.rand(100)
114 [2] In [15]: a = np.random.rand(100)
133 [2] In [15]: a = np.random.rand(100)
115 [3] In [15]: a = np.random.rand(100)
134 [3] In [15]: a = np.random.rand(100)
116
135
117 In [7]: px from psum import psum
136 In [7]: px from psum import psum
118 Parallel execution on engines: all
137 Parallel execution on engines: all
119 Out[7]:
138 Out[7]:
120 <Results List>
139 <Results List>
121 [0] In [16]: from psum import psum
140 [0] In [16]: from psum import psum
122 [1] In [16]: from psum import psum
141 [1] In [16]: from psum import psum
123 [2] In [16]: from psum import psum
142 [2] In [16]: from psum import psum
124 [3] In [16]: from psum import psum
143 [3] In [16]: from psum import psum
125
144
126 In [8]: px s = psum(a)
145 In [8]: px s = psum(a)
127 Parallel execution on engines: all
146 Parallel execution on engines: all
128 Out[8]:
147 Out[8]:
129 <Results List>
148 <Results List>
130 [0] In [17]: s = psum(a)
149 [0] In [17]: s = psum(a)
131 [1] In [17]: s = psum(a)
150 [1] In [17]: s = psum(a)
132 [2] In [17]: s = psum(a)
151 [2] In [17]: s = psum(a)
133 [3] In [17]: s = psum(a)
152 [3] In [17]: s = psum(a)
134
153
135 In [9]: px print s
154 In [9]: px print s
136 Parallel execution on engines: all
155 Parallel execution on engines: all
137 Out[9]:
156 Out[9]:
138 <Results List>
157 <Results List>
139 [0] In [18]: print s
158 [0] In [18]: print s
140 [0] Out[18]: 187.451545803
159 [0] Out[18]: 187.451545803
141
160
142 [1] In [18]: print s
161 [1] In [18]: print s
143 [1] Out[18]: 187.451545803
162 [1] Out[18]: 187.451545803
144
163
145 [2] In [18]: print s
164 [2] In [18]: print s
146 [2] Out[18]: 187.451545803
165 [2] Out[18]: 187.451545803
147
166
148 [3] In [18]: print s
167 [3] In [18]: print s
149 [3] Out[18]: 187.451545803
168 [3] Out[18]: 187.451545803
150
169
151 Any Python code that makes calls to MPI can be used in this manner, including
170 Any Python code that makes calls to MPI can be used in this manner, including
152 compiled C, C++ and Fortran libraries that have been exposed to Python.
171 compiled C, C++ and Fortran libraries that have been exposed to Python.
153
172
154 .. [MPI] Message Passing Interface. http://www-unix.mcs.anl.gov/mpi/
173 .. [MPI] Message Passing Interface. http://www-unix.mcs.anl.gov/mpi/
155 .. [mpi4py] MPI for Python. mpi4py: http://mpi4py.scipy.org/
174 .. [mpi4py] MPI for Python. mpi4py: http://mpi4py.scipy.org/
156 .. [OpenMPI] Open MPI. http://www.open-mpi.org/
175 .. [OpenMPI] Open MPI. http://www.open-mpi.org/
157 .. [PyTrilinos] PyTrilinos. http://trilinos.sandia.gov/packages/pytrilinos/
176 .. [PyTrilinos] PyTrilinos. http://trilinos.sandia.gov/packages/pytrilinos/
@@ -1,828 +1,835 b''
1 .. _parallelmultiengine:
1 .. _parallelmultiengine:
2
2
3 ===============================
3 ===============================
4 IPython's multiengine interface
4 IPython's multiengine interface
5 ===============================
5 ===============================
6
6
7 The multiengine interface represents one possible way of working with a set of
7 The multiengine interface represents one possible way of working with a set of
8 IPython engines. The basic idea behind the multiengine interface is that the
8 IPython engines. The basic idea behind the multiengine interface is that the
9 capabilities of each engine are directly and explicitly exposed to the user.
9 capabilities of each engine are directly and explicitly exposed to the user.
10 Thus, in the multiengine interface, each engine is given an id that is used to
10 Thus, in the multiengine interface, each engine is given an id that is used to
11 identify the engine and give it work to do. This interface is very intuitive
11 identify the engine and give it work to do. This interface is very intuitive
12 and is designed with interactive usage in mind, and is thus the best place for
12 and is designed with interactive usage in mind, and is thus the best place for
13 new users of IPython to begin.
13 new users of IPython to begin.
14
14
15 Starting the IPython controller and engines
15 Starting the IPython controller and engines
16 ===========================================
16 ===========================================
17
17
18 To follow along with this tutorial, you will need to start the IPython
18 To follow along with this tutorial, you will need to start the IPython
19 controller and four IPython engines. The simplest way of doing this is to use
19 controller and four IPython engines. The simplest way of doing this is to use
20 the :command:`ipcluster` command::
20 the :command:`ipcluster` command::
21
21
22 $ ipcluster local -n 4
22 $ ipcluster local -n 4
23
23
24 For more detailed information about starting the controller and engines, see
24 For more detailed information about starting the controller and engines, see
25 our :ref:`introduction <ip1par>` to using IPython for parallel computing.
25 our :ref:`introduction <ip1par>` to using IPython for parallel computing.
26
26
27 Creating a ``MultiEngineClient`` instance
27 Creating a ``MultiEngineClient`` instance
28 =========================================
28 =========================================
29
29
30 The first step is to import the IPython :mod:`IPython.kernel.client` module
30 The first step is to import the IPython :mod:`IPython.kernel.client` module
31 and then create a :class:`MultiEngineClient` instance:
31 and then create a :class:`MultiEngineClient` instance:
32
32
33 .. sourcecode:: ipython
33 .. sourcecode:: ipython
34
34
35 In [1]: from IPython.kernel import client
35 In [1]: from IPython.kernel import client
36
36
37 In [2]: mec = client.MultiEngineClient()
37 In [2]: mec = client.MultiEngineClient()
38
38
39 This form assumes that the :file:`ipcontroller-mec.furl` is in the
39 This form assumes that the :file:`ipcontroller-mec.furl` is in the
40 :file:`~./ipython/security` directory on the client's host. If not, the
40 :file:`~./ipython/security` directory on the client's host. If not, the
41 location of the FURL file must be given as an argument to the
41 location of the FURL file must be given as an argument to the
42 constructor:
42 constructor:
43
43
44 .. sourcecode:: ipython
44 .. sourcecode:: ipython
45
45
46 In [2]: mec = client.MultiEngineClient('/path/to/my/ipcontroller-mec.furl')
46 In [2]: mec = client.MultiEngineClient('/path/to/my/ipcontroller-mec.furl')
47
47
48 To make sure there are engines connected to the controller, use can get a list
48 To make sure there are engines connected to the controller, use can get a list
49 of engine ids:
49 of engine ids:
50
50
51 .. sourcecode:: ipython
51 .. sourcecode:: ipython
52
52
53 In [3]: mec.get_ids()
53 In [3]: mec.get_ids()
54 Out[3]: [0, 1, 2, 3]
54 Out[3]: [0, 1, 2, 3]
55
55
56 Here we see that there are four engines ready to do work for us.
56 Here we see that there are four engines ready to do work for us.
57
57
58 Quick and easy parallelism
58 Quick and easy parallelism
59 ==========================
59 ==========================
60
60
61 In many cases, you simply want to apply a Python function to a sequence of objects, but *in parallel*. The multiengine interface provides two simple ways of accomplishing this: a parallel version of :func:`map` and ``@parallel`` function decorator.
61 In many cases, you simply want to apply a Python function to a sequence of
62 objects, but *in parallel*. The multiengine interface provides two simple ways
63 of accomplishing this: a parallel version of :func:`map` and ``@parallel``
64 function decorator.
62
65
63 Parallel map
66 Parallel map
64 ------------
67 ------------
65
68
66 Python's builtin :func:`map` functions allows a function to be applied to a
69 Python's builtin :func:`map` functions allows a function to be applied to a
67 sequence element-by-element. This type of code is typically trivial to
70 sequence element-by-element. This type of code is typically trivial to
68 parallelize. In fact, the multiengine interface in IPython already has a
71 parallelize. In fact, the multiengine interface in IPython already has a
69 parallel version of :meth:`map` that works just like its serial counterpart:
72 parallel version of :meth:`map` that works just like its serial counterpart:
70
73
71 .. sourcecode:: ipython
74 .. sourcecode:: ipython
72
75
73 In [63]: serial_result = map(lambda x:x**10, range(32))
76 In [63]: serial_result = map(lambda x:x**10, range(32))
74
77
75 In [64]: parallel_result = mec.map(lambda x:x**10, range(32))
78 In [64]: parallel_result = mec.map(lambda x:x**10, range(32))
76
79
77 In [65]: serial_result==parallel_result
80 In [65]: serial_result==parallel_result
78 Out[65]: True
81 Out[65]: True
79
82
80 .. note::
83 .. note::
81
84
82 The multiengine interface version of :meth:`map` does not do any load
85 The multiengine interface version of :meth:`map` does not do any load
83 balancing. For a load balanced version, see the task interface.
86 balancing. For a load balanced version, see the task interface.
84
87
85 .. seealso::
88 .. seealso::
86
89
87 The :meth:`map` method has a number of options that can be controlled by
90 The :meth:`map` method has a number of options that can be controlled by
88 the :meth:`mapper` method. See its docstring for more information.
91 the :meth:`mapper` method. See its docstring for more information.
89
92
90 Parallel function decorator
93 Parallel function decorator
91 ---------------------------
94 ---------------------------
92
95
93 Parallel functions are just like normal function, but they can be called on sequences and *in parallel*. The multiengine interface provides a decorator that turns any Python function into a parallel function:
96 Parallel functions are just like normal function, but they can be called on
97 sequences and *in parallel*. The multiengine interface provides a decorator
98 that turns any Python function into a parallel function:
94
99
95 .. sourcecode:: ipython
100 .. sourcecode:: ipython
96
101
97 In [10]: @mec.parallel()
102 In [10]: @mec.parallel()
98 ....: def f(x):
103 ....: def f(x):
99 ....: return 10.0*x**4
104 ....: return 10.0*x**4
100 ....:
105 ....:
101
106
102 In [11]: f(range(32)) # this is done in parallel
107 In [11]: f(range(32)) # this is done in parallel
103 Out[11]:
108 Out[11]:
104 [0.0,10.0,160.0,...]
109 [0.0,10.0,160.0,...]
105
110
106 See the docstring for the :meth:`parallel` decorator for options.
111 See the docstring for the :meth:`parallel` decorator for options.
107
112
108 Running Python commands
113 Running Python commands
109 =======================
114 =======================
110
115
111 The most basic type of operation that can be performed on the engines is to
116 The most basic type of operation that can be performed on the engines is to
112 execute Python code. Executing Python code can be done in blocking or
117 execute Python code. Executing Python code can be done in blocking or
113 non-blocking mode (blocking is default) using the :meth:`execute` method.
118 non-blocking mode (blocking is default) using the :meth:`execute` method.
114
119
115 Blocking execution
120 Blocking execution
116 ------------------
121 ------------------
117
122
118 In blocking mode, the :class:`MultiEngineClient` object (called ``mec`` in
123 In blocking mode, the :class:`MultiEngineClient` object (called ``mec`` in
119 these examples) submits the command to the controller, which places the
124 these examples) submits the command to the controller, which places the
120 command in the engines' queues for execution. The :meth:`execute` call then
125 command in the engines' queues for execution. The :meth:`execute` call then
121 blocks until the engines are done executing the command:
126 blocks until the engines are done executing the command:
122
127
123 .. sourcecode:: ipython
128 .. sourcecode:: ipython
124
129
125 # The default is to run on all engines
130 # The default is to run on all engines
126 In [4]: mec.execute('a=5')
131 In [4]: mec.execute('a=5')
127 Out[4]:
132 Out[4]:
128 <Results List>
133 <Results List>
129 [0] In [1]: a=5
134 [0] In [1]: a=5
130 [1] In [1]: a=5
135 [1] In [1]: a=5
131 [2] In [1]: a=5
136 [2] In [1]: a=5
132 [3] In [1]: a=5
137 [3] In [1]: a=5
133
138
134 In [5]: mec.execute('b=10')
139 In [5]: mec.execute('b=10')
135 Out[5]:
140 Out[5]:
136 <Results List>
141 <Results List>
137 [0] In [2]: b=10
142 [0] In [2]: b=10
138 [1] In [2]: b=10
143 [1] In [2]: b=10
139 [2] In [2]: b=10
144 [2] In [2]: b=10
140 [3] In [2]: b=10
145 [3] In [2]: b=10
141
146
142 Python commands can be executed on specific engines by calling execute using
147 Python commands can be executed on specific engines by calling execute using
143 the ``targets`` keyword argument:
148 the ``targets`` keyword argument:
144
149
145 .. sourcecode:: ipython
150 .. sourcecode:: ipython
146
151
147 In [6]: mec.execute('c=a+b',targets=[0,2])
152 In [6]: mec.execute('c=a+b',targets=[0,2])
148 Out[6]:
153 Out[6]:
149 <Results List>
154 <Results List>
150 [0] In [3]: c=a+b
155 [0] In [3]: c=a+b
151 [2] In [3]: c=a+b
156 [2] In [3]: c=a+b
152
157
153
158
154 In [7]: mec.execute('c=a-b',targets=[1,3])
159 In [7]: mec.execute('c=a-b',targets=[1,3])
155 Out[7]:
160 Out[7]:
156 <Results List>
161 <Results List>
157 [1] In [3]: c=a-b
162 [1] In [3]: c=a-b
158 [3] In [3]: c=a-b
163 [3] In [3]: c=a-b
159
164
160
165
161 In [8]: mec.execute('print c')
166 In [8]: mec.execute('print c')
162 Out[8]:
167 Out[8]:
163 <Results List>
168 <Results List>
164 [0] In [4]: print c
169 [0] In [4]: print c
165 [0] Out[4]: 15
170 [0] Out[4]: 15
166
171
167 [1] In [4]: print c
172 [1] In [4]: print c
168 [1] Out[4]: -5
173 [1] Out[4]: -5
169
174
170 [2] In [4]: print c
175 [2] In [4]: print c
171 [2] Out[4]: 15
176 [2] Out[4]: 15
172
177
173 [3] In [4]: print c
178 [3] In [4]: print c
174 [3] Out[4]: -5
179 [3] Out[4]: -5
175
180
176 This example also shows one of the most important things about the IPython
181 This example also shows one of the most important things about the IPython
177 engines: they have a persistent user namespaces. The :meth:`execute` method
182 engines: they have a persistent user namespaces. The :meth:`execute` method
178 returns a Python ``dict`` that contains useful information:
183 returns a Python ``dict`` that contains useful information:
179
184
180 .. sourcecode:: ipython
185 .. sourcecode:: ipython
181
186
182 In [9]: result_dict = mec.execute('d=10; print d')
187 In [9]: result_dict = mec.execute('d=10; print d')
183
188
184 In [10]: for r in result_dict:
189 In [10]: for r in result_dict:
185 ....: print r
190 ....: print r
186 ....:
191 ....:
187 ....:
192 ....:
188 {'input': {'translated': 'd=10; print d', 'raw': 'd=10; print d'}, 'number': 5, 'id': 0, 'stdout': '10\n'}
193 {'input': {'translated': 'd=10; print d', 'raw': 'd=10; print d'}, 'number': 5, 'id': 0, 'stdout': '10\n'}
189 {'input': {'translated': 'd=10; print d', 'raw': 'd=10; print d'}, 'number': 5, 'id': 1, 'stdout': '10\n'}
194 {'input': {'translated': 'd=10; print d', 'raw': 'd=10; print d'}, 'number': 5, 'id': 1, 'stdout': '10\n'}
190 {'input': {'translated': 'd=10; print d', 'raw': 'd=10; print d'}, 'number': 5, 'id': 2, 'stdout': '10\n'}
195 {'input': {'translated': 'd=10; print d', 'raw': 'd=10; print d'}, 'number': 5, 'id': 2, 'stdout': '10\n'}
191 {'input': {'translated': 'd=10; print d', 'raw': 'd=10; print d'}, 'number': 5, 'id': 3, 'stdout': '10\n'}
196 {'input': {'translated': 'd=10; print d', 'raw': 'd=10; print d'}, 'number': 5, 'id': 3, 'stdout': '10\n'}
192
197
193 Non-blocking execution
198 Non-blocking execution
194 ----------------------
199 ----------------------
195
200
196 In non-blocking mode, :meth:`execute` submits the command to be executed and
201 In non-blocking mode, :meth:`execute` submits the command to be executed and
197 then returns a :class:`PendingResult` object immediately. The
202 then returns a :class:`PendingResult` object immediately. The
198 :class:`PendingResult` object gives you a way of getting a result at a later
203 :class:`PendingResult` object gives you a way of getting a result at a later
199 time through its :meth:`get_result` method or :attr:`r` attribute. This allows
204 time through its :meth:`get_result` method or :attr:`r` attribute. This allows
200 you to quickly submit long running commands without blocking your local
205 you to quickly submit long running commands without blocking your local
201 Python/IPython session:
206 Python/IPython session:
202
207
203 .. sourcecode:: ipython
208 .. sourcecode:: ipython
204
209
205 # In blocking mode
210 # In blocking mode
206 In [6]: mec.execute('import time')
211 In [6]: mec.execute('import time')
207 Out[6]:
212 Out[6]:
208 <Results List>
213 <Results List>
209 [0] In [1]: import time
214 [0] In [1]: import time
210 [1] In [1]: import time
215 [1] In [1]: import time
211 [2] In [1]: import time
216 [2] In [1]: import time
212 [3] In [1]: import time
217 [3] In [1]: import time
213
218
214 # In non-blocking mode
219 # In non-blocking mode
215 In [7]: pr = mec.execute('time.sleep(10)',block=False)
220 In [7]: pr = mec.execute('time.sleep(10)',block=False)
216
221
217 # Now block for the result
222 # Now block for the result
218 In [8]: pr.get_result()
223 In [8]: pr.get_result()
219 Out[8]:
224 Out[8]:
220 <Results List>
225 <Results List>
221 [0] In [2]: time.sleep(10)
226 [0] In [2]: time.sleep(10)
222 [1] In [2]: time.sleep(10)
227 [1] In [2]: time.sleep(10)
223 [2] In [2]: time.sleep(10)
228 [2] In [2]: time.sleep(10)
224 [3] In [2]: time.sleep(10)
229 [3] In [2]: time.sleep(10)
225
230
226 # Again in non-blocking mode
231 # Again in non-blocking mode
227 In [9]: pr = mec.execute('time.sleep(10)',block=False)
232 In [9]: pr = mec.execute('time.sleep(10)',block=False)
228
233
229 # Poll to see if the result is ready
234 # Poll to see if the result is ready
230 In [10]: pr.get_result(block=False)
235 In [10]: pr.get_result(block=False)
231
236
232 # A shorthand for get_result(block=True)
237 # A shorthand for get_result(block=True)
233 In [11]: pr.r
238 In [11]: pr.r
234 Out[11]:
239 Out[11]:
235 <Results List>
240 <Results List>
236 [0] In [3]: time.sleep(10)
241 [0] In [3]: time.sleep(10)
237 [1] In [3]: time.sleep(10)
242 [1] In [3]: time.sleep(10)
238 [2] In [3]: time.sleep(10)
243 [2] In [3]: time.sleep(10)
239 [3] In [3]: time.sleep(10)
244 [3] In [3]: time.sleep(10)
240
245
241 Often, it is desirable to wait until a set of :class:`PendingResult` objects
246 Often, it is desirable to wait until a set of :class:`PendingResult` objects
242 are done. For this, there is a the method :meth:`barrier`. This method takes a
247 are done. For this, there is a the method :meth:`barrier`. This method takes a
243 tuple of :class:`PendingResult` objects and blocks until all of the associated
248 tuple of :class:`PendingResult` objects and blocks until all of the associated
244 results are ready:
249 results are ready:
245
250
246 .. sourcecode:: ipython
251 .. sourcecode:: ipython
247
252
248 In [72]: mec.block=False
253 In [72]: mec.block=False
249
254
250 # A trivial list of PendingResults objects
255 # A trivial list of PendingResults objects
251 In [73]: pr_list = [mec.execute('time.sleep(3)') for i in range(10)]
256 In [73]: pr_list = [mec.execute('time.sleep(3)') for i in range(10)]
252
257
253 # Wait until all of them are done
258 # Wait until all of them are done
254 In [74]: mec.barrier(pr_list)
259 In [74]: mec.barrier(pr_list)
255
260
256 # Then, their results are ready using get_result or the r attribute
261 # Then, their results are ready using get_result or the r attribute
257 In [75]: pr_list[0].r
262 In [75]: pr_list[0].r
258 Out[75]:
263 Out[75]:
259 <Results List>
264 <Results List>
260 [0] In [20]: time.sleep(3)
265 [0] In [20]: time.sleep(3)
261 [1] In [19]: time.sleep(3)
266 [1] In [19]: time.sleep(3)
262 [2] In [20]: time.sleep(3)
267 [2] In [20]: time.sleep(3)
263 [3] In [19]: time.sleep(3)
268 [3] In [19]: time.sleep(3)
264
269
265
270
266 The ``block`` and ``targets`` keyword arguments and attributes
271 The ``block`` and ``targets`` keyword arguments and attributes
267 --------------------------------------------------------------
272 --------------------------------------------------------------
268
273
269 Most methods in the multiengine interface (like :meth:`execute`) accept
274 Most methods in the multiengine interface (like :meth:`execute`) accept
270 ``block`` and ``targets`` as keyword arguments. As we have seen above, these
275 ``block`` and ``targets`` as keyword arguments. As we have seen above, these
271 keyword arguments control the blocking mode and which engines the command is
276 keyword arguments control the blocking mode and which engines the command is
272 applied to. The :class:`MultiEngineClient` class also has :attr:`block` and
277 applied to. The :class:`MultiEngineClient` class also has :attr:`block` and
273 :attr:`targets` attributes that control the default behavior when the keyword
278 :attr:`targets` attributes that control the default behavior when the keyword
274 arguments are not provided. Thus the following logic is used for :attr:`block`
279 arguments are not provided. Thus the following logic is used for :attr:`block`
275 and :attr:`targets`:
280 and :attr:`targets`:
276
281
277 * If no keyword argument is provided, the instance attributes are used.
282 * If no keyword argument is provided, the instance attributes are used.
278 * Keyword argument, if provided override the instance attributes.
283 * Keyword argument, if provided override the instance attributes.
279
284
280 The following examples demonstrate how to use the instance attributes:
285 The following examples demonstrate how to use the instance attributes:
281
286
282 .. sourcecode:: ipython
287 .. sourcecode:: ipython
283
288
284 In [16]: mec.targets = [0,2]
289 In [16]: mec.targets = [0,2]
285
290
286 In [17]: mec.block = False
291 In [17]: mec.block = False
287
292
288 In [18]: pr = mec.execute('a=5')
293 In [18]: pr = mec.execute('a=5')
289
294
290 In [19]: pr.r
295 In [19]: pr.r
291 Out[19]:
296 Out[19]:
292 <Results List>
297 <Results List>
293 [0] In [6]: a=5
298 [0] In [6]: a=5
294 [2] In [6]: a=5
299 [2] In [6]: a=5
295
300
296 # Note targets='all' means all engines
301 # Note targets='all' means all engines
297 In [20]: mec.targets = 'all'
302 In [20]: mec.targets = 'all'
298
303
299 In [21]: mec.block = True
304 In [21]: mec.block = True
300
305
301 In [22]: mec.execute('b=10; print b')
306 In [22]: mec.execute('b=10; print b')
302 Out[22]:
307 Out[22]:
303 <Results List>
308 <Results List>
304 [0] In [7]: b=10; print b
309 [0] In [7]: b=10; print b
305 [0] Out[7]: 10
310 [0] Out[7]: 10
306
311
307 [1] In [6]: b=10; print b
312 [1] In [6]: b=10; print b
308 [1] Out[6]: 10
313 [1] Out[6]: 10
309
314
310 [2] In [7]: b=10; print b
315 [2] In [7]: b=10; print b
311 [2] Out[7]: 10
316 [2] Out[7]: 10
312
317
313 [3] In [6]: b=10; print b
318 [3] In [6]: b=10; print b
314 [3] Out[6]: 10
319 [3] Out[6]: 10
315
320
316 The :attr:`block` and :attr:`targets` instance attributes also determine the
321 The :attr:`block` and :attr:`targets` instance attributes also determine the
317 behavior of the parallel magic commands.
322 behavior of the parallel magic commands.
318
323
319
324
320 Parallel magic commands
325 Parallel magic commands
321 -----------------------
326 -----------------------
322
327
323 We provide a few IPython magic commands (``%px``, ``%autopx`` and ``%result``)
328 We provide a few IPython magic commands (``%px``, ``%autopx`` and ``%result``)
324 that make it more pleasant to execute Python commands on the engines
329 that make it more pleasant to execute Python commands on the engines
325 interactively. These are simply shortcuts to :meth:`execute` and
330 interactively. These are simply shortcuts to :meth:`execute` and
326 :meth:`get_result`. The ``%px`` magic executes a single Python command on the
331 :meth:`get_result`. The ``%px`` magic executes a single Python command on the
327 engines specified by the :attr:`targets` attribute of the
332 engines specified by the :attr:`targets` attribute of the
328 :class:`MultiEngineClient` instance (by default this is ``'all'``):
333 :class:`MultiEngineClient` instance (by default this is ``'all'``):
329
334
330 .. sourcecode:: ipython
335 .. sourcecode:: ipython
331
336
332 # Make this MultiEngineClient active for parallel magic commands
337 # Make this MultiEngineClient active for parallel magic commands
333 In [23]: mec.activate()
338 In [23]: mec.activate()
334
339
335 In [24]: mec.block=True
340 In [24]: mec.block=True
336
341
337 In [25]: import numpy
342 In [25]: import numpy
338
343
339 In [26]: %px import numpy
344 In [26]: %px import numpy
340 Executing command on Controller
345 Executing command on Controller
341 Out[26]:
346 Out[26]:
342 <Results List>
347 <Results List>
343 [0] In [8]: import numpy
348 [0] In [8]: import numpy
344 [1] In [7]: import numpy
349 [1] In [7]: import numpy
345 [2] In [8]: import numpy
350 [2] In [8]: import numpy
346 [3] In [7]: import numpy
351 [3] In [7]: import numpy
347
352
348
353
349 In [27]: %px a = numpy.random.rand(2,2)
354 In [27]: %px a = numpy.random.rand(2,2)
350 Executing command on Controller
355 Executing command on Controller
351 Out[27]:
356 Out[27]:
352 <Results List>
357 <Results List>
353 [0] In [9]: a = numpy.random.rand(2,2)
358 [0] In [9]: a = numpy.random.rand(2,2)
354 [1] In [8]: a = numpy.random.rand(2,2)
359 [1] In [8]: a = numpy.random.rand(2,2)
355 [2] In [9]: a = numpy.random.rand(2,2)
360 [2] In [9]: a = numpy.random.rand(2,2)
356 [3] In [8]: a = numpy.random.rand(2,2)
361 [3] In [8]: a = numpy.random.rand(2,2)
357
362
358
363
359 In [28]: %px print numpy.linalg.eigvals(a)
364 In [28]: %px print numpy.linalg.eigvals(a)
360 Executing command on Controller
365 Executing command on Controller
361 Out[28]:
366 Out[28]:
362 <Results List>
367 <Results List>
363 [0] In [10]: print numpy.linalg.eigvals(a)
368 [0] In [10]: print numpy.linalg.eigvals(a)
364 [0] Out[10]: [ 1.28167017 0.14197338]
369 [0] Out[10]: [ 1.28167017 0.14197338]
365
370
366 [1] In [9]: print numpy.linalg.eigvals(a)
371 [1] In [9]: print numpy.linalg.eigvals(a)
367 [1] Out[9]: [-0.14093616 1.27877273]
372 [1] Out[9]: [-0.14093616 1.27877273]
368
373
369 [2] In [10]: print numpy.linalg.eigvals(a)
374 [2] In [10]: print numpy.linalg.eigvals(a)
370 [2] Out[10]: [-0.37023573 1.06779409]
375 [2] Out[10]: [-0.37023573 1.06779409]
371
376
372 [3] In [9]: print numpy.linalg.eigvals(a)
377 [3] In [9]: print numpy.linalg.eigvals(a)
373 [3] Out[9]: [ 0.83664764 -0.25602658]
378 [3] Out[9]: [ 0.83664764 -0.25602658]
374
379
375 The ``%result`` magic gets and prints the stdin/stdout/stderr of the last
380 The ``%result`` magic gets and prints the stdin/stdout/stderr of the last
376 command executed on each engine. It is simply a shortcut to the
381 command executed on each engine. It is simply a shortcut to the
377 :meth:`get_result` method:
382 :meth:`get_result` method:
378
383
379 .. sourcecode:: ipython
384 .. sourcecode:: ipython
380
385
381 In [29]: %result
386 In [29]: %result
382 Out[29]:
387 Out[29]:
383 <Results List>
388 <Results List>
384 [0] In [10]: print numpy.linalg.eigvals(a)
389 [0] In [10]: print numpy.linalg.eigvals(a)
385 [0] Out[10]: [ 1.28167017 0.14197338]
390 [0] Out[10]: [ 1.28167017 0.14197338]
386
391
387 [1] In [9]: print numpy.linalg.eigvals(a)
392 [1] In [9]: print numpy.linalg.eigvals(a)
388 [1] Out[9]: [-0.14093616 1.27877273]
393 [1] Out[9]: [-0.14093616 1.27877273]
389
394
390 [2] In [10]: print numpy.linalg.eigvals(a)
395 [2] In [10]: print numpy.linalg.eigvals(a)
391 [2] Out[10]: [-0.37023573 1.06779409]
396 [2] Out[10]: [-0.37023573 1.06779409]
392
397
393 [3] In [9]: print numpy.linalg.eigvals(a)
398 [3] In [9]: print numpy.linalg.eigvals(a)
394 [3] Out[9]: [ 0.83664764 -0.25602658]
399 [3] Out[9]: [ 0.83664764 -0.25602658]
395
400
396 The ``%autopx`` magic switches to a mode where everything you type is executed
401 The ``%autopx`` magic switches to a mode where everything you type is executed
397 on the engines given by the :attr:`targets` attribute:
402 on the engines given by the :attr:`targets` attribute:
398
403
399 .. sourcecode:: ipython
404 .. sourcecode:: ipython
400
405
401 In [30]: mec.block=False
406 In [30]: mec.block=False
402
407
403 In [31]: %autopx
408 In [31]: %autopx
404 Auto Parallel Enabled
409 Auto Parallel Enabled
405 Type %autopx to disable
410 Type %autopx to disable
406
411
407 In [32]: max_evals = []
412 In [32]: max_evals = []
408 <IPython.kernel.multiengineclient.PendingResult object at 0x17b8a70>
413 <IPython.kernel.multiengineclient.PendingResult object at 0x17b8a70>
409
414
410 In [33]: for i in range(100):
415 In [33]: for i in range(100):
411 ....: a = numpy.random.rand(10,10)
416 ....: a = numpy.random.rand(10,10)
412 ....: a = a+a.transpose()
417 ....: a = a+a.transpose()
413 ....: evals = numpy.linalg.eigvals(a)
418 ....: evals = numpy.linalg.eigvals(a)
414 ....: max_evals.append(evals[0].real)
419 ....: max_evals.append(evals[0].real)
415 ....:
420 ....:
416 ....:
421 ....:
417 <IPython.kernel.multiengineclient.PendingResult object at 0x17af8f0>
422 <IPython.kernel.multiengineclient.PendingResult object at 0x17af8f0>
418
423
419 In [34]: %autopx
424 In [34]: %autopx
420 Auto Parallel Disabled
425 Auto Parallel Disabled
421
426
422 In [35]: mec.block=True
427 In [35]: mec.block=True
423
428
424 In [36]: px print "Average max eigenvalue is: ", sum(max_evals)/len(max_evals)
429 In [36]: px print "Average max eigenvalue is: ", sum(max_evals)/len(max_evals)
425 Executing command on Controller
430 Executing command on Controller
426 Out[36]:
431 Out[36]:
427 <Results List>
432 <Results List>
428 [0] In [13]: print "Average max eigenvalue is: ", sum(max_evals)/len(max_evals)
433 [0] In [13]: print "Average max eigenvalue is: ", sum(max_evals)/len(max_evals)
429 [0] Out[13]: Average max eigenvalue is: 10.1387247332
434 [0] Out[13]: Average max eigenvalue is: 10.1387247332
430
435
431 [1] In [12]: print "Average max eigenvalue is: ", sum(max_evals)/len(max_evals)
436 [1] In [12]: print "Average max eigenvalue is: ", sum(max_evals)/len(max_evals)
432 [1] Out[12]: Average max eigenvalue is: 10.2076902286
437 [1] Out[12]: Average max eigenvalue is: 10.2076902286
433
438
434 [2] In [13]: print "Average max eigenvalue is: ", sum(max_evals)/len(max_evals)
439 [2] In [13]: print "Average max eigenvalue is: ", sum(max_evals)/len(max_evals)
435 [2] Out[13]: Average max eigenvalue is: 10.1891484655
440 [2] Out[13]: Average max eigenvalue is: 10.1891484655
436
441
437 [3] In [12]: print "Average max eigenvalue is: ", sum(max_evals)/len(max_evals)
442 [3] In [12]: print "Average max eigenvalue is: ", sum(max_evals)/len(max_evals)
438 [3] Out[12]: Average max eigenvalue is: 10.1158837784
443 [3] Out[12]: Average max eigenvalue is: 10.1158837784
439
444
440
445
441 Moving Python objects around
446 Moving Python objects around
442 ============================
447 ============================
443
448
444 In addition to executing code on engines, you can transfer Python objects to
449 In addition to executing code on engines, you can transfer Python objects to
445 and from your IPython session and the engines. In IPython, these operations
450 and from your IPython session and the engines. In IPython, these operations
446 are called :meth:`push` (sending an object to the engines) and :meth:`pull`
451 are called :meth:`push` (sending an object to the engines) and :meth:`pull`
447 (getting an object from the engines).
452 (getting an object from the engines).
448
453
449 Basic push and pull
454 Basic push and pull
450 -------------------
455 -------------------
451
456
452 Here are some examples of how you use :meth:`push` and :meth:`pull`:
457 Here are some examples of how you use :meth:`push` and :meth:`pull`:
453
458
454 .. sourcecode:: ipython
459 .. sourcecode:: ipython
455
460
456 In [38]: mec.push(dict(a=1.03234,b=3453))
461 In [38]: mec.push(dict(a=1.03234,b=3453))
457 Out[38]: [None, None, None, None]
462 Out[38]: [None, None, None, None]
458
463
459 In [39]: mec.pull('a')
464 In [39]: mec.pull('a')
460 Out[39]: [1.03234, 1.03234, 1.03234, 1.03234]
465 Out[39]: [1.03234, 1.03234, 1.03234, 1.03234]
461
466
462 In [40]: mec.pull('b',targets=0)
467 In [40]: mec.pull('b',targets=0)
463 Out[40]: [3453]
468 Out[40]: [3453]
464
469
465 In [41]: mec.pull(('a','b'))
470 In [41]: mec.pull(('a','b'))
466 Out[41]: [[1.03234, 3453], [1.03234, 3453], [1.03234, 3453], [1.03234, 3453]]
471 Out[41]: [[1.03234, 3453], [1.03234, 3453], [1.03234, 3453], [1.03234, 3453]]
467
472
468 In [42]: mec.zip_pull(('a','b'))
473 In [42]: mec.zip_pull(('a','b'))
469 Out[42]: [(1.03234, 1.03234, 1.03234, 1.03234), (3453, 3453, 3453, 3453)]
474 Out[42]: [(1.03234, 1.03234, 1.03234, 1.03234), (3453, 3453, 3453, 3453)]
470
475
471 In [43]: mec.push(dict(c='speed'))
476 In [43]: mec.push(dict(c='speed'))
472 Out[43]: [None, None, None, None]
477 Out[43]: [None, None, None, None]
473
478
474 In [44]: %px print c
479 In [44]: %px print c
475 Executing command on Controller
480 Executing command on Controller
476 Out[44]:
481 Out[44]:
477 <Results List>
482 <Results List>
478 [0] In [14]: print c
483 [0] In [14]: print c
479 [0] Out[14]: speed
484 [0] Out[14]: speed
480
485
481 [1] In [13]: print c
486 [1] In [13]: print c
482 [1] Out[13]: speed
487 [1] Out[13]: speed
483
488
484 [2] In [14]: print c
489 [2] In [14]: print c
485 [2] Out[14]: speed
490 [2] Out[14]: speed
486
491
487 [3] In [13]: print c
492 [3] In [13]: print c
488 [3] Out[13]: speed
493 [3] Out[13]: speed
489
494
490 In non-blocking mode :meth:`push` and :meth:`pull` also return
495 In non-blocking mode :meth:`push` and :meth:`pull` also return
491 :class:`PendingResult` objects:
496 :class:`PendingResult` objects:
492
497
493 .. sourcecode:: ipython
498 .. sourcecode:: ipython
494
499
495 In [47]: mec.block=False
500 In [47]: mec.block=False
496
501
497 In [48]: pr = mec.pull('a')
502 In [48]: pr = mec.pull('a')
498
503
499 In [49]: pr.r
504 In [49]: pr.r
500 Out[49]: [1.03234, 1.03234, 1.03234, 1.03234]
505 Out[49]: [1.03234, 1.03234, 1.03234, 1.03234]
501
506
502
507
503 Push and pull for functions
508 Push and pull for functions
504 ---------------------------
509 ---------------------------
505
510
506 Functions can also be pushed and pulled using :meth:`push_function` and
511 Functions can also be pushed and pulled using :meth:`push_function` and
507 :meth:`pull_function`:
512 :meth:`pull_function`:
508
513
509 .. sourcecode:: ipython
514 .. sourcecode:: ipython
510
515
511 In [52]: mec.block=True
516 In [52]: mec.block=True
512
517
513 In [53]: def f(x):
518 In [53]: def f(x):
514 ....: return 2.0*x**4
519 ....: return 2.0*x**4
515 ....:
520 ....:
516
521
517 In [54]: mec.push_function(dict(f=f))
522 In [54]: mec.push_function(dict(f=f))
518 Out[54]: [None, None, None, None]
523 Out[54]: [None, None, None, None]
519
524
520 In [55]: mec.execute('y = f(4.0)')
525 In [55]: mec.execute('y = f(4.0)')
521 Out[55]:
526 Out[55]:
522 <Results List>
527 <Results List>
523 [0] In [15]: y = f(4.0)
528 [0] In [15]: y = f(4.0)
524 [1] In [14]: y = f(4.0)
529 [1] In [14]: y = f(4.0)
525 [2] In [15]: y = f(4.0)
530 [2] In [15]: y = f(4.0)
526 [3] In [14]: y = f(4.0)
531 [3] In [14]: y = f(4.0)
527
532
528
533
529 In [56]: px print y
534 In [56]: px print y
530 Executing command on Controller
535 Executing command on Controller
531 Out[56]:
536 Out[56]:
532 <Results List>
537 <Results List>
533 [0] In [16]: print y
538 [0] In [16]: print y
534 [0] Out[16]: 512.0
539 [0] Out[16]: 512.0
535
540
536 [1] In [15]: print y
541 [1] In [15]: print y
537 [1] Out[15]: 512.0
542 [1] Out[15]: 512.0
538
543
539 [2] In [16]: print y
544 [2] In [16]: print y
540 [2] Out[16]: 512.0
545 [2] Out[16]: 512.0
541
546
542 [3] In [15]: print y
547 [3] In [15]: print y
543 [3] Out[15]: 512.0
548 [3] Out[15]: 512.0
544
549
545
550
546 Dictionary interface
551 Dictionary interface
547 --------------------
552 --------------------
548
553
549 As a shorthand to :meth:`push` and :meth:`pull`, the
554 As a shorthand to :meth:`push` and :meth:`pull`, the
550 :class:`MultiEngineClient` class implements some of the Python dictionary
555 :class:`MultiEngineClient` class implements some of the Python dictionary
551 interface. This make the remote namespaces of the engines appear as a local
556 interface. This make the remote namespaces of the engines appear as a local
552 dictionary. Underneath, this uses :meth:`push` and :meth:`pull`:
557 dictionary. Underneath, this uses :meth:`push` and :meth:`pull`:
553
558
554 .. sourcecode:: ipython
559 .. sourcecode:: ipython
555
560
556 In [50]: mec.block=True
561 In [50]: mec.block=True
557
562
558 In [51]: mec['a']=['foo','bar']
563 In [51]: mec['a']=['foo','bar']
559
564
560 In [52]: mec['a']
565 In [52]: mec['a']
561 Out[52]: [['foo', 'bar'], ['foo', 'bar'], ['foo', 'bar'], ['foo', 'bar']]
566 Out[52]: [['foo', 'bar'], ['foo', 'bar'], ['foo', 'bar'], ['foo', 'bar']]
562
567
563 Scatter and gather
568 Scatter and gather
564 ------------------
569 ------------------
565
570
566 Sometimes it is useful to partition a sequence and push the partitions to
571 Sometimes it is useful to partition a sequence and push the partitions to
567 different engines. In MPI language, this is know as scatter/gather and we
572 different engines. In MPI language, this is know as scatter/gather and we
568 follow that terminology. However, it is important to remember that in
573 follow that terminology. However, it is important to remember that in
569 IPython's :class:`MultiEngineClient` class, :meth:`scatter` is from the
574 IPython's :class:`MultiEngineClient` class, :meth:`scatter` is from the
570 interactive IPython session to the engines and :meth:`gather` is from the
575 interactive IPython session to the engines and :meth:`gather` is from the
571 engines back to the interactive IPython session. For scatter/gather operations
576 engines back to the interactive IPython session. For scatter/gather operations
572 between engines, MPI should be used:
577 between engines, MPI should be used:
573
578
574 .. sourcecode:: ipython
579 .. sourcecode:: ipython
575
580
576 In [58]: mec.scatter('a',range(16))
581 In [58]: mec.scatter('a',range(16))
577 Out[58]: [None, None, None, None]
582 Out[58]: [None, None, None, None]
578
583
579 In [59]: px print a
584 In [59]: px print a
580 Executing command on Controller
585 Executing command on Controller
581 Out[59]:
586 Out[59]:
582 <Results List>
587 <Results List>
583 [0] In [17]: print a
588 [0] In [17]: print a
584 [0] Out[17]: [0, 1, 2, 3]
589 [0] Out[17]: [0, 1, 2, 3]
585
590
586 [1] In [16]: print a
591 [1] In [16]: print a
587 [1] Out[16]: [4, 5, 6, 7]
592 [1] Out[16]: [4, 5, 6, 7]
588
593
589 [2] In [17]: print a
594 [2] In [17]: print a
590 [2] Out[17]: [8, 9, 10, 11]
595 [2] Out[17]: [8, 9, 10, 11]
591
596
592 [3] In [16]: print a
597 [3] In [16]: print a
593 [3] Out[16]: [12, 13, 14, 15]
598 [3] Out[16]: [12, 13, 14, 15]
594
599
595
600
596 In [60]: mec.gather('a')
601 In [60]: mec.gather('a')
597 Out[60]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
602 Out[60]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
598
603
599 Other things to look at
604 Other things to look at
600 =======================
605 =======================
601
606
602 How to do parallel list comprehensions
607 How to do parallel list comprehensions
603 --------------------------------------
608 --------------------------------------
604
609
605 In many cases list comprehensions are nicer than using the map function. While
610 In many cases list comprehensions are nicer than using the map function. While
606 we don't have fully parallel list comprehensions, it is simple to get the
611 we don't have fully parallel list comprehensions, it is simple to get the
607 basic effect using :meth:`scatter` and :meth:`gather`:
612 basic effect using :meth:`scatter` and :meth:`gather`:
608
613
609 .. sourcecode:: ipython
614 .. sourcecode:: ipython
610
615
611 In [66]: mec.scatter('x',range(64))
616 In [66]: mec.scatter('x',range(64))
612 Out[66]: [None, None, None, None]
617 Out[66]: [None, None, None, None]
613
618
614 In [67]: px y = [i**10 for i in x]
619 In [67]: px y = [i**10 for i in x]
615 Executing command on Controller
620 Executing command on Controller
616 Out[67]:
621 Out[67]:
617 <Results List>
622 <Results List>
618 [0] In [19]: y = [i**10 for i in x]
623 [0] In [19]: y = [i**10 for i in x]
619 [1] In [18]: y = [i**10 for i in x]
624 [1] In [18]: y = [i**10 for i in x]
620 [2] In [19]: y = [i**10 for i in x]
625 [2] In [19]: y = [i**10 for i in x]
621 [3] In [18]: y = [i**10 for i in x]
626 [3] In [18]: y = [i**10 for i in x]
622
627
623
628
624 In [68]: y = mec.gather('y')
629 In [68]: y = mec.gather('y')
625
630
626 In [69]: print y
631 In [69]: print y
627 [0, 1, 1024, 59049, 1048576, 9765625, 60466176, 282475249, 1073741824,...]
632 [0, 1, 1024, 59049, 1048576, 9765625, 60466176, 282475249, 1073741824,...]
628
633
629 Parallel exceptions
634 Parallel exceptions
630 -------------------
635 -------------------
631
636
632 In the multiengine interface, parallel commands can raise Python exceptions,
637 In the multiengine interface, parallel commands can raise Python exceptions,
633 just like serial commands. But, it is a little subtle, because a single
638 just like serial commands. But, it is a little subtle, because a single
634 parallel command can actually raise multiple exceptions (one for each engine
639 parallel command can actually raise multiple exceptions (one for each engine
635 the command was run on). To express this idea, the MultiEngine interface has a
640 the command was run on). To express this idea, the MultiEngine interface has a
636 :exc:`CompositeError` exception class that will be raised in most cases. The
641 :exc:`CompositeError` exception class that will be raised in most cases. The
637 :exc:`CompositeError` class is a special type of exception that wraps one or
642 :exc:`CompositeError` class is a special type of exception that wraps one or
638 more other types of exceptions. Here is how it works:
643 more other types of exceptions. Here is how it works:
639
644
640 .. sourcecode:: ipython
645 .. sourcecode:: ipython
641
646
642 In [76]: mec.block=True
647 In [76]: mec.block=True
643
648
644 In [77]: mec.execute('1/0')
649 In [77]: mec.execute('1/0')
645 ---------------------------------------------------------------------------
650 ---------------------------------------------------------------------------
646 CompositeError Traceback (most recent call last)
651 CompositeError Traceback (most recent call last)
647
652
648 /ipython1-client-r3021/docs/examples/<ipython console> in <module>()
653 /ipython1-client-r3021/docs/examples/<ipython console> in <module>()
649
654
650 /ipython1-client-r3021/ipython1/kernel/multiengineclient.pyc in execute(self, lines, targets, block)
655 /ipython1-client-r3021/ipython1/kernel/multiengineclient.pyc in execute(self, lines, targets, block)
651 432 targets, block = self._findTargetsAndBlock(targets, block)
656 432 targets, block = self._findTargetsAndBlock(targets, block)
652 433 result = blockingCallFromThread(self.smultiengine.execute, lines,
657 433 result = blockingCallFromThread(self.smultiengine.execute, lines,
653 --> 434 targets=targets, block=block)
658 --> 434 targets=targets, block=block)
654 435 if block:
659 435 if block:
655 436 result = ResultList(result)
660 436 result = ResultList(result)
656
661
657 /ipython1-client-r3021/ipython1/kernel/twistedutil.pyc in blockingCallFromThread(f, *a, **kw)
662 /ipython1-client-r3021/ipython1/kernel/twistedutil.pyc in blockingCallFromThread(f, *a, **kw)
658 72 result.raiseException()
663 72 result.raiseException()
659 73 except Exception, e:
664 73 except Exception, e:
660 ---> 74 raise e
665 ---> 74 raise e
661 75 return result
666 75 return result
662 76
667 76
663
668
664 CompositeError: one or more exceptions from call to method: execute
669 CompositeError: one or more exceptions from call to method: execute
665 [0:execute]: ZeroDivisionError: integer division or modulo by zero
670 [0:execute]: ZeroDivisionError: integer division or modulo by zero
666 [1:execute]: ZeroDivisionError: integer division or modulo by zero
671 [1:execute]: ZeroDivisionError: integer division or modulo by zero
667 [2:execute]: ZeroDivisionError: integer division or modulo by zero
672 [2:execute]: ZeroDivisionError: integer division or modulo by zero
668 [3:execute]: ZeroDivisionError: integer division or modulo by zero
673 [3:execute]: ZeroDivisionError: integer division or modulo by zero
669
674
670 Notice how the error message printed when :exc:`CompositeError` is raised has information about the individual exceptions that were raised on each engine. If you want, you can even raise one of these original exceptions:
675 Notice how the error message printed when :exc:`CompositeError` is raised has
676 information about the individual exceptions that were raised on each engine.
677 If you want, you can even raise one of these original exceptions:
671
678
672 .. sourcecode:: ipython
679 .. sourcecode:: ipython
673
680
674 In [80]: try:
681 In [80]: try:
675 ....: mec.execute('1/0')
682 ....: mec.execute('1/0')
676 ....: except client.CompositeError, e:
683 ....: except client.CompositeError, e:
677 ....: e.raise_exception()
684 ....: e.raise_exception()
678 ....:
685 ....:
679 ....:
686 ....:
680 ---------------------------------------------------------------------------
687 ---------------------------------------------------------------------------
681 ZeroDivisionError Traceback (most recent call last)
688 ZeroDivisionError Traceback (most recent call last)
682
689
683 /ipython1-client-r3021/docs/examples/<ipython console> in <module>()
690 /ipython1-client-r3021/docs/examples/<ipython console> in <module>()
684
691
685 /ipython1-client-r3021/ipython1/kernel/error.pyc in raise_exception(self, excid)
692 /ipython1-client-r3021/ipython1/kernel/error.pyc in raise_exception(self, excid)
686 156 raise IndexError("an exception with index %i does not exist"%excid)
693 156 raise IndexError("an exception with index %i does not exist"%excid)
687 157 else:
694 157 else:
688 --> 158 raise et, ev, etb
695 --> 158 raise et, ev, etb
689 159
696 159
690 160 def collect_exceptions(rlist, method):
697 160 def collect_exceptions(rlist, method):
691
698
692 ZeroDivisionError: integer division or modulo by zero
699 ZeroDivisionError: integer division or modulo by zero
693
700
694 If you are working in IPython, you can simple type ``%debug`` after one of
701 If you are working in IPython, you can simple type ``%debug`` after one of
695 these :exc:`CompositeError` exceptions is raised, and inspect the exception
702 these :exc:`CompositeError` exceptions is raised, and inspect the exception
696 instance:
703 instance:
697
704
698 .. sourcecode:: ipython
705 .. sourcecode:: ipython
699
706
700 In [81]: mec.execute('1/0')
707 In [81]: mec.execute('1/0')
701 ---------------------------------------------------------------------------
708 ---------------------------------------------------------------------------
702 CompositeError Traceback (most recent call last)
709 CompositeError Traceback (most recent call last)
703
710
704 /ipython1-client-r3021/docs/examples/<ipython console> in <module>()
711 /ipython1-client-r3021/docs/examples/<ipython console> in <module>()
705
712
706 /ipython1-client-r3021/ipython1/kernel/multiengineclient.pyc in execute(self, lines, targets, block)
713 /ipython1-client-r3021/ipython1/kernel/multiengineclient.pyc in execute(self, lines, targets, block)
707 432 targets, block = self._findTargetsAndBlock(targets, block)
714 432 targets, block = self._findTargetsAndBlock(targets, block)
708 433 result = blockingCallFromThread(self.smultiengine.execute, lines,
715 433 result = blockingCallFromThread(self.smultiengine.execute, lines,
709 --> 434 targets=targets, block=block)
716 --> 434 targets=targets, block=block)
710 435 if block:
717 435 if block:
711 436 result = ResultList(result)
718 436 result = ResultList(result)
712
719
713 /ipython1-client-r3021/ipython1/kernel/twistedutil.pyc in blockingCallFromThread(f, *a, **kw)
720 /ipython1-client-r3021/ipython1/kernel/twistedutil.pyc in blockingCallFromThread(f, *a, **kw)
714 72 result.raiseException()
721 72 result.raiseException()
715 73 except Exception, e:
722 73 except Exception, e:
716 ---> 74 raise e
723 ---> 74 raise e
717 75 return result
724 75 return result
718 76
725 76
719
726
720 CompositeError: one or more exceptions from call to method: execute
727 CompositeError: one or more exceptions from call to method: execute
721 [0:execute]: ZeroDivisionError: integer division or modulo by zero
728 [0:execute]: ZeroDivisionError: integer division or modulo by zero
722 [1:execute]: ZeroDivisionError: integer division or modulo by zero
729 [1:execute]: ZeroDivisionError: integer division or modulo by zero
723 [2:execute]: ZeroDivisionError: integer division or modulo by zero
730 [2:execute]: ZeroDivisionError: integer division or modulo by zero
724 [3:execute]: ZeroDivisionError: integer division or modulo by zero
731 [3:execute]: ZeroDivisionError: integer division or modulo by zero
725
732
726 In [82]: %debug
733 In [82]: %debug
727 >
734 >
728
735
729 /ipython1-client-r3021/ipython1/kernel/twistedutil.py(74)blockingCallFromThread()
736 /ipython1-client-r3021/ipython1/kernel/twistedutil.py(74)blockingCallFromThread()
730 73 except Exception, e:
737 73 except Exception, e:
731 ---> 74 raise e
738 ---> 74 raise e
732 75 return result
739 75 return result
733
740
734 # With the debugger running, e is the exceptions instance. We can tab complete
741 # With the debugger running, e is the exceptions instance. We can tab complete
735 # on it and see the extra methods that are available.
742 # on it and see the extra methods that are available.
736 ipdb> e.
743 ipdb> e.
737 e.__class__ e.__getitem__ e.__new__ e.__setstate__ e.args
744 e.__class__ e.__getitem__ e.__new__ e.__setstate__ e.args
738 e.__delattr__ e.__getslice__ e.__reduce__ e.__str__ e.elist
745 e.__delattr__ e.__getslice__ e.__reduce__ e.__str__ e.elist
739 e.__dict__ e.__hash__ e.__reduce_ex__ e.__weakref__ e.message
746 e.__dict__ e.__hash__ e.__reduce_ex__ e.__weakref__ e.message
740 e.__doc__ e.__init__ e.__repr__ e._get_engine_str e.print_tracebacks
747 e.__doc__ e.__init__ e.__repr__ e._get_engine_str e.print_tracebacks
741 e.__getattribute__ e.__module__ e.__setattr__ e._get_traceback e.raise_exception
748 e.__getattribute__ e.__module__ e.__setattr__ e._get_traceback e.raise_exception
742 ipdb> e.print_tracebacks()
749 ipdb> e.print_tracebacks()
743 [0:execute]:
750 [0:execute]:
744 ---------------------------------------------------------------------------
751 ---------------------------------------------------------------------------
745 ZeroDivisionError Traceback (most recent call last)
752 ZeroDivisionError Traceback (most recent call last)
746
753
747 /ipython1-client-r3021/docs/examples/<string> in <module>()
754 /ipython1-client-r3021/docs/examples/<string> in <module>()
748
755
749 ZeroDivisionError: integer division or modulo by zero
756 ZeroDivisionError: integer division or modulo by zero
750
757
751 [1:execute]:
758 [1:execute]:
752 ---------------------------------------------------------------------------
759 ---------------------------------------------------------------------------
753 ZeroDivisionError Traceback (most recent call last)
760 ZeroDivisionError Traceback (most recent call last)
754
761
755 /ipython1-client-r3021/docs/examples/<string> in <module>()
762 /ipython1-client-r3021/docs/examples/<string> in <module>()
756
763
757 ZeroDivisionError: integer division or modulo by zero
764 ZeroDivisionError: integer division or modulo by zero
758
765
759 [2:execute]:
766 [2:execute]:
760 ---------------------------------------------------------------------------
767 ---------------------------------------------------------------------------
761 ZeroDivisionError Traceback (most recent call last)
768 ZeroDivisionError Traceback (most recent call last)
762
769
763 /ipython1-client-r3021/docs/examples/<string> in <module>()
770 /ipython1-client-r3021/docs/examples/<string> in <module>()
764
771
765 ZeroDivisionError: integer division or modulo by zero
772 ZeroDivisionError: integer division or modulo by zero
766
773
767 [3:execute]:
774 [3:execute]:
768 ---------------------------------------------------------------------------
775 ---------------------------------------------------------------------------
769 ZeroDivisionError Traceback (most recent call last)
776 ZeroDivisionError Traceback (most recent call last)
770
777
771 /ipython1-client-r3021/docs/examples/<string> in <module>()
778 /ipython1-client-r3021/docs/examples/<string> in <module>()
772
779
773 ZeroDivisionError: integer division or modulo by zero
780 ZeroDivisionError: integer division or modulo by zero
774
781
775 .. note::
782 .. note::
776
783
777 The above example appears to be broken right now because of a change in
784 The above example appears to be broken right now because of a change in
778 how we are using Twisted.
785 how we are using Twisted.
779
786
780 All of this same error handling magic even works in non-blocking mode:
787 All of this same error handling magic even works in non-blocking mode:
781
788
782 .. sourcecode:: ipython
789 .. sourcecode:: ipython
783
790
784 In [83]: mec.block=False
791 In [83]: mec.block=False
785
792
786 In [84]: pr = mec.execute('1/0')
793 In [84]: pr = mec.execute('1/0')
787
794
788 In [85]: pr.r
795 In [85]: pr.r
789 ---------------------------------------------------------------------------
796 ---------------------------------------------------------------------------
790 CompositeError Traceback (most recent call last)
797 CompositeError Traceback (most recent call last)
791
798
792 /ipython1-client-r3021/docs/examples/<ipython console> in <module>()
799 /ipython1-client-r3021/docs/examples/<ipython console> in <module>()
793
800
794 /ipython1-client-r3021/ipython1/kernel/multiengineclient.pyc in _get_r(self)
801 /ipython1-client-r3021/ipython1/kernel/multiengineclient.pyc in _get_r(self)
795 170
802 170
796 171 def _get_r(self):
803 171 def _get_r(self):
797 --> 172 return self.get_result(block=True)
804 --> 172 return self.get_result(block=True)
798 173
805 173
799 174 r = property(_get_r)
806 174 r = property(_get_r)
800
807
801 /ipython1-client-r3021/ipython1/kernel/multiengineclient.pyc in get_result(self, default, block)
808 /ipython1-client-r3021/ipython1/kernel/multiengineclient.pyc in get_result(self, default, block)
802 131 return self.result
809 131 return self.result
803 132 try:
810 132 try:
804 --> 133 result = self.client.get_pending_deferred(self.result_id, block)
811 --> 133 result = self.client.get_pending_deferred(self.result_id, block)
805 134 except error.ResultNotCompleted:
812 134 except error.ResultNotCompleted:
806 135 return default
813 135 return default
807
814
808 /ipython1-client-r3021/ipython1/kernel/multiengineclient.pyc in get_pending_deferred(self, deferredID, block)
815 /ipython1-client-r3021/ipython1/kernel/multiengineclient.pyc in get_pending_deferred(self, deferredID, block)
809 385
816 385
810 386 def get_pending_deferred(self, deferredID, block):
817 386 def get_pending_deferred(self, deferredID, block):
811 --> 387 return blockingCallFromThread(self.smultiengine.get_pending_deferred, deferredID, block)
818 --> 387 return blockingCallFromThread(self.smultiengine.get_pending_deferred, deferredID, block)
812 388
819 388
813 389 def barrier(self, pendingResults):
820 389 def barrier(self, pendingResults):
814
821
815 /ipython1-client-r3021/ipython1/kernel/twistedutil.pyc in blockingCallFromThread(f, *a, **kw)
822 /ipython1-client-r3021/ipython1/kernel/twistedutil.pyc in blockingCallFromThread(f, *a, **kw)
816 72 result.raiseException()
823 72 result.raiseException()
817 73 except Exception, e:
824 73 except Exception, e:
818 ---> 74 raise e
825 ---> 74 raise e
819 75 return result
826 75 return result
820 76
827 76
821
828
822 CompositeError: one or more exceptions from call to method: execute
829 CompositeError: one or more exceptions from call to method: execute
823 [0:execute]: ZeroDivisionError: integer division or modulo by zero
830 [0:execute]: ZeroDivisionError: integer division or modulo by zero
824 [1:execute]: ZeroDivisionError: integer division or modulo by zero
831 [1:execute]: ZeroDivisionError: integer division or modulo by zero
825 [2:execute]: ZeroDivisionError: integer division or modulo by zero
832 [2:execute]: ZeroDivisionError: integer division or modulo by zero
826 [3:execute]: ZeroDivisionError: integer division or modulo by zero
833 [3:execute]: ZeroDivisionError: integer division or modulo by zero
827
834
828
835
@@ -1,351 +1,387 b''
1 .. _parallel_process:
1 .. _parallel_process:
2
2
3 ===========================================
3 ===========================================
4 Starting the IPython controller and engines
4 Starting the IPython controller and engines
5 ===========================================
5 ===========================================
6
6
7 To use IPython for parallel computing, you need to start one instance of
7 To use IPython for parallel computing, you need to start one instance of
8 the controller and one or more instances of the engine. The controller
8 the controller and one or more instances of the engine. The controller
9 and each engine can run on different machines or on the same machine.
9 and each engine can run on different machines or on the same machine.
10 Because of this, there are many different possibilities.
10 Because of this, there are many different possibilities.
11
11
12 Broadly speaking, there are two ways of going about starting a controller and engines:
12 Broadly speaking, there are two ways of going about starting a controller and engines:
13
13
14 * In an automated manner using the :command:`ipcluster` command.
14 * In an automated manner using the :command:`ipcluster` command.
15 * In a more manual way using the :command:`ipcontroller` and
15 * In a more manual way using the :command:`ipcontroller` and
16 :command:`ipengine` commands.
16 :command:`ipengine` commands.
17
17
18 This document describes both of these methods. We recommend that new users start with the :command:`ipcluster` command as it simplifies many common usage cases.
18 This document describes both of these methods. We recommend that new users
19 start with the :command:`ipcluster` command as it simplifies many common usage
20 cases.
19
21
20 General considerations
22 General considerations
21 ======================
23 ======================
22
24
23 Before delving into the details about how you can start a controller and engines using the various methods, we outline some of the general issues that come up when starting the controller and engines. These things come up no matter which method you use to start your IPython cluster.
25 Before delving into the details about how you can start a controller and
26 engines using the various methods, we outline some of the general issues that
27 come up when starting the controller and engines. These things come up no
28 matter which method you use to start your IPython cluster.
24
29
25 Let's say that you want to start the controller on ``host0`` and engines on hosts ``host1``-``hostn``. The following steps are then required:
30 Let's say that you want to start the controller on ``host0`` and engines on
31 hosts ``host1``-``hostn``. The following steps are then required:
26
32
27 1. Start the controller on ``host0`` by running :command:`ipcontroller` on
33 1. Start the controller on ``host0`` by running :command:`ipcontroller` on
28 ``host0``.
34 ``host0``.
29 2. Move the FURL file (:file:`ipcontroller-engine.furl`) created by the
35 2. Move the FURL file (:file:`ipcontroller-engine.furl`) created by the
30 controller from ``host0`` to hosts ``host1``-``hostn``.
36 controller from ``host0`` to hosts ``host1``-``hostn``.
31 3. Start the engines on hosts ``host1``-``hostn`` by running
37 3. Start the engines on hosts ``host1``-``hostn`` by running
32 :command:`ipengine`. This command has to be told where the FURL file
38 :command:`ipengine`. This command has to be told where the FURL file
33 (:file:`ipcontroller-engine.furl`) is located.
39 (:file:`ipcontroller-engine.furl`) is located.
34
40
35 At this point, the controller and engines will be connected. By default, the
41 At this point, the controller and engines will be connected. By default, the
36 FURL files created by the controller are put into the
42 FURL files created by the controller are put into the
37 :file:`~/.ipython/security` directory. If the engines share a filesystem with
43 :file:`~/.ipython/security` directory. If the engines share a filesystem with
38 the controller, step 2 can be skipped as the engines will automatically look
44 the controller, step 2 can be skipped as the engines will automatically look
39 at that location.
45 at that location.
40
46
41 The final step required required to actually use the running controller from a
47 The final step required required to actually use the running controller from a
42 client is to move the FURL files :file:`ipcontroller-mec.furl` and
48 client is to move the FURL files :file:`ipcontroller-mec.furl` and
43 :file:`ipcontroller-tc.furl` from ``host0`` to the host where the clients will
49 :file:`ipcontroller-tc.furl` from ``host0`` to the host where the clients will
44 be run. If these file are put into the :file:`~/.ipython/security` directory of the client's host, they will be found automatically. Otherwise, the full path to them has to be passed to the client's constructor.
50 be run. If these file are put into the :file:`~/.ipython/security` directory
51 of the client's host, they will be found automatically. Otherwise, the full
52 path to them has to be passed to the client's constructor.
45
53
46 Using :command:`ipcluster`
54 Using :command:`ipcluster`
47 ==========================
55 ==========================
48
56
49 The :command:`ipcluster` command provides a simple way of starting a controller and engines in the following situations:
57 The :command:`ipcluster` command provides a simple way of starting a
58 controller and engines in the following situations:
50
59
51 1. When the controller and engines are all run on localhost. This is useful
60 1. When the controller and engines are all run on localhost. This is useful
52 for testing or running on a multicore computer.
61 for testing or running on a multicore computer.
53 2. When engines are started using the :command:`mpirun` command that comes
62 2. When engines are started using the :command:`mpirun` command that comes
54 with most MPI [MPI]_ implementations
63 with most MPI [MPI]_ implementations
55 3. When engines are started using the PBS [PBS]_ batch system.
64 3. When engines are started using the PBS [PBS]_ batch system.
56 4. When the controller is started on localhost and the engines are started on
65 4. When the controller is started on localhost and the engines are started on
57 remote nodes using :command:`ssh`.
66 remote nodes using :command:`ssh`.
58
67
59 .. note::
68 .. note::
60
69
61 It is also possible for advanced users to add support to
70 It is also possible for advanced users to add support to
62 :command:`ipcluster` for starting controllers and engines using other
71 :command:`ipcluster` for starting controllers and engines using other
63 methods (like Sun's Grid Engine for example).
72 methods (like Sun's Grid Engine for example).
64
73
65 .. note::
74 .. note::
66
75
67 Currently :command:`ipcluster` requires that the
76 Currently :command:`ipcluster` requires that the
68 :file:`~/.ipython/security` directory live on a shared filesystem that is
77 :file:`~/.ipython/security` directory live on a shared filesystem that is
69 seen by both the controller and engines. If you don't have a shared file
78 seen by both the controller and engines. If you don't have a shared file
70 system you will need to use :command:`ipcontroller` and
79 system you will need to use :command:`ipcontroller` and
71 :command:`ipengine` directly. This constraint can be relaxed if you are
80 :command:`ipengine` directly. This constraint can be relaxed if you are
72 using the :command:`ssh` method to start the cluster.
81 using the :command:`ssh` method to start the cluster.
73
82
74 Underneath the hood, :command:`ipcluster` just uses :command:`ipcontroller`
83 Underneath the hood, :command:`ipcluster` just uses :command:`ipcontroller`
75 and :command:`ipengine` to perform the steps described above.
84 and :command:`ipengine` to perform the steps described above.
76
85
77 Using :command:`ipcluster` in local mode
86 Using :command:`ipcluster` in local mode
78 ----------------------------------------
87 ----------------------------------------
79
88
80 To start one controller and 4 engines on localhost, just do::
89 To start one controller and 4 engines on localhost, just do::
81
90
82 $ ipcluster local -n 4
91 $ ipcluster local -n 4
83
92
84 To see other command line options for the local mode, do::
93 To see other command line options for the local mode, do::
85
94
86 $ ipcluster local -h
95 $ ipcluster local -h
87
96
88 Using :command:`ipcluster` in mpiexec/mpirun mode
97 Using :command:`ipcluster` in mpiexec/mpirun mode
89 -------------------------------------------------
98 -------------------------------------------------
90
99
91 The mpiexec/mpirun mode is useful if you:
100 The mpiexec/mpirun mode is useful if you:
92
101
93 1. Have MPI installed.
102 1. Have MPI installed.
94 2. Your systems are configured to use the :command:`mpiexec` or
103 2. Your systems are configured to use the :command:`mpiexec` or
95 :command:`mpirun` commands to start MPI processes.
104 :command:`mpirun` commands to start MPI processes.
96
105
97 .. note::
106 .. note::
98
107
99 The preferred command to use is :command:`mpiexec`. However, we also
108 The preferred command to use is :command:`mpiexec`. However, we also
100 support :command:`mpirun` for backwards compatibility. The underlying
109 support :command:`mpirun` for backwards compatibility. The underlying
101 logic used is exactly the same, the only difference being the name of the
110 logic used is exactly the same, the only difference being the name of the
102 command line program that is called.
111 command line program that is called.
103
112
104 If these are satisfied, you can start an IPython cluster using::
113 If these are satisfied, you can start an IPython cluster using::
105
114
106 $ ipcluster mpiexec -n 4
115 $ ipcluster mpiexec -n 4
107
116
108 This does the following:
117 This does the following:
109
118
110 1. Starts the IPython controller on current host.
119 1. Starts the IPython controller on current host.
111 2. Uses :command:`mpiexec` to start 4 engines.
120 2. Uses :command:`mpiexec` to start 4 engines.
112
121
113 On newer MPI implementations (such as OpenMPI), this will work even if you don't make any calls to MPI or call :func:`MPI_Init`. However, older MPI implementations actually require each process to call :func:`MPI_Init` upon starting. The easiest way of having this done is to install the mpi4py [mpi4py]_ package and then call ipcluster with the ``--mpi`` option::
122 On newer MPI implementations (such as OpenMPI), this will work even if you
123 don't make any calls to MPI or call :func:`MPI_Init`. However, older MPI
124 implementations actually require each process to call :func:`MPI_Init` upon
125 starting. The easiest way of having this done is to install the mpi4py
126 [mpi4py]_ package and then call ipcluster with the ``--mpi`` option::
114
127
115 $ ipcluster mpiexec -n 4 --mpi=mpi4py
128 $ ipcluster mpiexec -n 4 --mpi=mpi4py
116
129
117 Unfortunately, even this won't work for some MPI implementations. If you are having problems with this, you will likely have to use a custom Python executable that itself calls :func:`MPI_Init` at the appropriate time. Fortunately, mpi4py comes with such a custom Python executable that is easy to install and use. However, this custom Python executable approach will not work with :command:`ipcluster` currently.
130 Unfortunately, even this won't work for some MPI implementations. If you are
131 having problems with this, you will likely have to use a custom Python
132 executable that itself calls :func:`MPI_Init` at the appropriate time.
133 Fortunately, mpi4py comes with such a custom Python executable that is easy to
134 install and use. However, this custom Python executable approach will not work
135 with :command:`ipcluster` currently.
118
136
119 Additional command line options for this mode can be found by doing::
137 Additional command line options for this mode can be found by doing::
120
138
121 $ ipcluster mpiexec -h
139 $ ipcluster mpiexec -h
122
140
123 More details on using MPI with IPython can be found :ref:`here <parallelmpi>`.
141 More details on using MPI with IPython can be found :ref:`here <parallelmpi>`.
124
142
125
143
126 Using :command:`ipcluster` in PBS mode
144 Using :command:`ipcluster` in PBS mode
127 --------------------------------------
145 --------------------------------------
128
146
129 The PBS mode uses the Portable Batch System [PBS]_ to start the engines. To use this mode, you first need to create a PBS script template that will be used to start the engines. Here is a sample PBS script template:
147 The PBS mode uses the Portable Batch System [PBS]_ to start the engines. To
148 use this mode, you first need to create a PBS script template that will be
149 used to start the engines. Here is a sample PBS script template:
130
150
131 .. sourcecode:: bash
151 .. sourcecode:: bash
132
152
133 #PBS -N ipython
153 #PBS -N ipython
134 #PBS -j oe
154 #PBS -j oe
135 #PBS -l walltime=00:10:00
155 #PBS -l walltime=00:10:00
136 #PBS -l nodes=${n/4}:ppn=4
156 #PBS -l nodes=${n/4}:ppn=4
137 #PBS -q parallel
157 #PBS -q parallel
138
158
139 cd $$PBS_O_WORKDIR
159 cd $$PBS_O_WORKDIR
140 export PATH=$$HOME/usr/local/bin
160 export PATH=$$HOME/usr/local/bin
141 export PYTHONPATH=$$HOME/usr/local/lib/python2.4/site-packages
161 export PYTHONPATH=$$HOME/usr/local/lib/python2.4/site-packages
142 /usr/local/bin/mpiexec -n ${n} ipengine --logfile=$$PBS_O_WORKDIR/ipengine
162 /usr/local/bin/mpiexec -n ${n} ipengine --logfile=$$PBS_O_WORKDIR/ipengine
143
163
144 There are a few important points about this template:
164 There are a few important points about this template:
145
165
146 1. This template will be rendered at runtime using IPython's :mod:`Itpl`
166 1. This template will be rendered at runtime using IPython's :mod:`Itpl`
147 template engine.
167 template engine.
148
168
149 2. Instead of putting in the actual number of engines, use the notation
169 2. Instead of putting in the actual number of engines, use the notation
150 ``${n}`` to indicate the number of engines to be started. You can also uses
170 ``${n}`` to indicate the number of engines to be started. You can also uses
151 expressions like ``${n/4}`` in the template to indicate the number of
171 expressions like ``${n/4}`` in the template to indicate the number of
152 nodes.
172 nodes.
153
173
154 3. Because ``$`` is a special character used by the template engine, you must
174 3. Because ``$`` is a special character used by the template engine, you must
155 escape any ``$`` by using ``$$``. This is important when referring to
175 escape any ``$`` by using ``$$``. This is important when referring to
156 environment variables in the template.
176 environment variables in the template.
157
177
158 4. Any options to :command:`ipengine` should be given in the batch script
178 4. Any options to :command:`ipengine` should be given in the batch script
159 template.
179 template.
160
180
161 5. Depending on the configuration of you system, you may have to set
181 5. Depending on the configuration of you system, you may have to set
162 environment variables in the script template.
182 environment variables in the script template.
163
183
164 Once you have created such a script, save it with a name like :file:`pbs.template`. Now you are ready to start your job::
184 Once you have created such a script, save it with a name like
185 :file:`pbs.template`. Now you are ready to start your job::
165
186
166 $ ipcluster pbs -n 128 --pbs-script=pbs.template
187 $ ipcluster pbs -n 128 --pbs-script=pbs.template
167
188
168 Additional command line options for this mode can be found by doing::
189 Additional command line options for this mode can be found by doing::
169
190
170 $ ipcluster pbs -h
191 $ ipcluster pbs -h
171
192
172 Using :command:`ipcluster` in SSH mode
193 Using :command:`ipcluster` in SSH mode
173 --------------------------------------
194 --------------------------------------
174
195
175 The SSH mode uses :command:`ssh` to execute :command:`ipengine` on remote
196 The SSH mode uses :command:`ssh` to execute :command:`ipengine` on remote
176 nodes and the :command:`ipcontroller` on localhost.
197 nodes and the :command:`ipcontroller` on localhost.
177
198
178 When using using this mode it highly recommended that you have set up SSH keys and are using ssh-agent [SSH]_ for password-less logins.
199 When using using this mode it highly recommended that you have set up SSH keys
200 and are using ssh-agent [SSH]_ for password-less logins.
179
201
180 To use this mode you need a python file describing the cluster, here is an example of such a "clusterfile":
202 To use this mode you need a python file describing the cluster, here is an
203 example of such a "clusterfile":
181
204
182 .. sourcecode:: python
205 .. sourcecode:: python
183
206
184 send_furl = True
207 send_furl = True
185 engines = { 'host1.example.com' : 2,
208 engines = { 'host1.example.com' : 2,
186 'host2.example.com' : 5,
209 'host2.example.com' : 5,
187 'host3.example.com' : 1,
210 'host3.example.com' : 1,
188 'host4.example.com' : 8 }
211 'host4.example.com' : 8 }
189
212
190 Since this is a regular python file usual python syntax applies. Things to note:
213 Since this is a regular python file usual python syntax applies. Things to
214 note:
191
215
192 * The `engines` dict, where the keys is the host we want to run engines on and
216 * The `engines` dict, where the keys is the host we want to run engines on and
193 the value is the number of engines to run on that host.
217 the value is the number of engines to run on that host.
194 * send_furl can either be `True` or `False`, if `True` it will copy over the
218 * send_furl can either be `True` or `False`, if `True` it will copy over the
195 furl needed for :command:`ipengine` to each host.
219 furl needed for :command:`ipengine` to each host.
196
220
197 The ``--clusterfile`` command line option lets you specify the file to use for
221 The ``--clusterfile`` command line option lets you specify the file to use for
198 the cluster definition. Once you have your cluster file and you can
222 the cluster definition. Once you have your cluster file and you can
199 :command:`ssh` into the remote hosts with out an password you are ready to
223 :command:`ssh` into the remote hosts with out an password you are ready to
200 start your cluster like so:
224 start your cluster like so:
201
225
202 .. sourcecode:: bash
226 .. sourcecode:: bash
203
227
204 $ ipcluster ssh --clusterfile /path/to/my/clusterfile.py
228 $ ipcluster ssh --clusterfile /path/to/my/clusterfile.py
205
229
206
230
207 Two helper shell scripts are used to start and stop :command:`ipengine` on remote hosts:
231 Two helper shell scripts are used to start and stop :command:`ipengine` on
232 remote hosts:
208
233
209 * sshx.sh
234 * sshx.sh
210 * engine_killer.sh
235 * engine_killer.sh
211
236
212 Defaults for both of these are contained in the source code for :command:`ipcluster`. The default scripts are written to a local file in a tmep directory and then copied to a temp directory on the remote host and executed from there. On most Unix, Linux and OS X systems this is /tmp.
237 Defaults for both of these are contained in the source code for
238 :command:`ipcluster`. The default scripts are written to a local file in a
239 tmep directory and then copied to a temp directory on the remote host and
240 executed from there. On most Unix, Linux and OS X systems this is /tmp.
213
241
214 The default sshx.sh is the following:
242 The default sshx.sh is the following:
215
243
216 .. sourcecode:: bash
244 .. sourcecode:: bash
217
245
218 #!/bin/sh
246 #!/bin/sh
219 "$@" &> /dev/null &
247 "$@" &> /dev/null &
220 echo $!
248 echo $!
221
249
222 If you want to use a custom sshx.sh script you need to use the ``--sshx``
250 If you want to use a custom sshx.sh script you need to use the ``--sshx``
223 option and specify the file to use. Using a custom sshx.sh file could be
251 option and specify the file to use. Using a custom sshx.sh file could be
224 helpful when you need to setup the environment on the remote host before
252 helpful when you need to setup the environment on the remote host before
225 executing :command:`ipengine`.
253 executing :command:`ipengine`.
226
254
227 For a detailed options list:
255 For a detailed options list:
228
256
229 .. sourcecode:: bash
257 .. sourcecode:: bash
230
258
231 $ ipcluster ssh -h
259 $ ipcluster ssh -h
232
260
233 Current limitations of the SSH mode of :command:`ipcluster` are:
261 Current limitations of the SSH mode of :command:`ipcluster` are:
234
262
235 * Untested on Windows. Would require a working :command:`ssh` on Windows.
263 * Untested on Windows. Would require a working :command:`ssh` on Windows.
236 Also, we are using shell scripts to setup and execute commands on remote
264 Also, we are using shell scripts to setup and execute commands on remote
237 hosts.
265 hosts.
238 * :command:`ipcontroller` is started on localhost, with no option to start it
266 * :command:`ipcontroller` is started on localhost, with no option to start it
239 on a remote node.
267 on a remote node.
240
268
241 Using the :command:`ipcontroller` and :command:`ipengine` commands
269 Using the :command:`ipcontroller` and :command:`ipengine` commands
242 ==================================================================
270 ==================================================================
243
271
244 It is also possible to use the :command:`ipcontroller` and :command:`ipengine` commands to start your controller and engines. This approach gives you full control over all aspects of the startup process.
272 It is also possible to use the :command:`ipcontroller` and :command:`ipengine`
273 commands to start your controller and engines. This approach gives you full
274 control over all aspects of the startup process.
245
275
246 Starting the controller and engine on your local machine
276 Starting the controller and engine on your local machine
247 --------------------------------------------------------
277 --------------------------------------------------------
248
278
249 To use :command:`ipcontroller` and :command:`ipengine` to start things on your
279 To use :command:`ipcontroller` and :command:`ipengine` to start things on your
250 local machine, do the following.
280 local machine, do the following.
251
281
252 First start the controller::
282 First start the controller::
253
283
254 $ ipcontroller
284 $ ipcontroller
255
285
256 Next, start however many instances of the engine you want using (repeatedly) the command::
286 Next, start however many instances of the engine you want using (repeatedly)
287 the command::
257
288
258 $ ipengine
289 $ ipengine
259
290
260 The engines should start and automatically connect to the controller using the FURL files in :file:`~./ipython/security`. You are now ready to use the controller and engines from IPython.
291 The engines should start and automatically connect to the controller using the
292 FURL files in :file:`~./ipython/security`. You are now ready to use the
293 controller and engines from IPython.
261
294
262 .. warning::
295 .. warning::
263
296
264 The order of the above operations is very important. You *must*
297 The order of the above operations is very important. You *must*
265 start the controller before the engines, since the engines connect
298 start the controller before the engines, since the engines connect
266 to the controller as they get started.
299 to the controller as they get started.
267
300
268 .. note::
301 .. note::
269
302
270 On some platforms (OS X), to put the controller and engine into the
303 On some platforms (OS X), to put the controller and engine into the
271 background you may need to give these commands in the form ``(ipcontroller
304 background you may need to give these commands in the form ``(ipcontroller
272 &)`` and ``(ipengine &)`` (with the parentheses) for them to work
305 &)`` and ``(ipengine &)`` (with the parentheses) for them to work
273 properly.
306 properly.
274
307
275 Starting the controller and engines on different hosts
308 Starting the controller and engines on different hosts
276 ------------------------------------------------------
309 ------------------------------------------------------
277
310
278 When the controller and engines are running on different hosts, things are
311 When the controller and engines are running on different hosts, things are
279 slightly more complicated, but the underlying ideas are the same:
312 slightly more complicated, but the underlying ideas are the same:
280
313
281 1. Start the controller on a host using :command:`ipcontroller`.
314 1. Start the controller on a host using :command:`ipcontroller`.
282 2. Copy :file:`ipcontroller-engine.furl` from :file:`~./ipython/security` on the controller's host to the host where the engines will run.
315 2. Copy :file:`ipcontroller-engine.furl` from :file:`~./ipython/security` on
316 the controller's host to the host where the engines will run.
283 3. Use :command:`ipengine` on the engine's hosts to start the engines.
317 3. Use :command:`ipengine` on the engine's hosts to start the engines.
284
318
285 The only thing you have to be careful of is to tell :command:`ipengine` where the :file:`ipcontroller-engine.furl` file is located. There are two ways you can do this:
319 The only thing you have to be careful of is to tell :command:`ipengine` where
320 the :file:`ipcontroller-engine.furl` file is located. There are two ways you
321 can do this:
286
322
287 * Put :file:`ipcontroller-engine.furl` in the :file:`~./ipython/security`
323 * Put :file:`ipcontroller-engine.furl` in the :file:`~./ipython/security`
288 directory on the engine's host, where it will be found automatically.
324 directory on the engine's host, where it will be found automatically.
289 * Call :command:`ipengine` with the ``--furl-file=full_path_to_the_file``
325 * Call :command:`ipengine` with the ``--furl-file=full_path_to_the_file``
290 flag.
326 flag.
291
327
292 The ``--furl-file`` flag works like this::
328 The ``--furl-file`` flag works like this::
293
329
294 $ ipengine --furl-file=/path/to/my/ipcontroller-engine.furl
330 $ ipengine --furl-file=/path/to/my/ipcontroller-engine.furl
295
331
296 .. note::
332 .. note::
297
333
298 If the controller's and engine's hosts all have a shared file system
334 If the controller's and engine's hosts all have a shared file system
299 (:file:`~./ipython/security` is the same on all of them), then things
335 (:file:`~./ipython/security` is the same on all of them), then things
300 will just work!
336 will just work!
301
337
302 Make FURL files persistent
338 Make FURL files persistent
303 ---------------------------
339 ---------------------------
304
340
305 At fist glance it may seem that that managing the FURL files is a bit
341 At fist glance it may seem that that managing the FURL files is a bit
306 annoying. Going back to the house and key analogy, copying the FURL around
342 annoying. Going back to the house and key analogy, copying the FURL around
307 each time you start the controller is like having to make a new key every time
343 each time you start the controller is like having to make a new key every time
308 you want to unlock the door and enter your house. As with your house, you want
344 you want to unlock the door and enter your house. As with your house, you want
309 to be able to create the key (or FURL file) once, and then simply use it at
345 to be able to create the key (or FURL file) once, and then simply use it at
310 any point in the future.
346 any point in the future.
311
347
312 This is possible, but before you do this, you **must** remove any old FURL
348 This is possible, but before you do this, you **must** remove any old FURL
313 files in the :file:`~/.ipython/security` directory.
349 files in the :file:`~/.ipython/security` directory.
314
350
315 .. warning::
351 .. warning::
316
352
317 You **must** remove old FURL files before using persistent FURL files.
353 You **must** remove old FURL files before using persistent FURL files.
318
354
319 Then, The only thing you have to do is decide what ports the controller will
355 Then, The only thing you have to do is decide what ports the controller will
320 listen on for the engines and clients. This is done as follows::
356 listen on for the engines and clients. This is done as follows::
321
357
322 $ ipcontroller -r --client-port=10101 --engine-port=10102
358 $ ipcontroller -r --client-port=10101 --engine-port=10102
323
359
324 These options also work with all of the various modes of
360 These options also work with all of the various modes of
325 :command:`ipcluster`::
361 :command:`ipcluster`::
326
362
327 $ ipcluster local -n 2 -r --client-port=10101 --engine-port=10102
363 $ ipcluster local -n 2 -r --client-port=10101 --engine-port=10102
328
364
329 Then, just copy the furl files over the first time and you are set. You can
365 Then, just copy the furl files over the first time and you are set. You can
330 start and stop the controller and engines any many times as you want in the
366 start and stop the controller and engines any many times as you want in the
331 future, just make sure to tell the controller to use the *same* ports.
367 future, just make sure to tell the controller to use the *same* ports.
332
368
333 .. note::
369 .. note::
334
370
335 You may ask the question: what ports does the controller listen on if you
371 You may ask the question: what ports does the controller listen on if you
336 don't tell is to use specific ones? The default is to use high random port
372 don't tell is to use specific ones? The default is to use high random port
337 numbers. We do this for two reasons: i) to increase security through
373 numbers. We do this for two reasons: i) to increase security through
338 obscurity and ii) to multiple controllers on a given host to start and
374 obscurity and ii) to multiple controllers on a given host to start and
339 automatically use different ports.
375 automatically use different ports.
340
376
341 Log files
377 Log files
342 ---------
378 ---------
343
379
344 All of the components of IPython have log files associated with them.
380 All of the components of IPython have log files associated with them.
345 These log files can be extremely useful in debugging problems with
381 These log files can be extremely useful in debugging problems with
346 IPython and can be found in the directory :file:`~/.ipython/log`. Sending
382 IPython and can be found in the directory :file:`~/.ipython/log`. Sending
347 the log files to us will often help us to debug any problems.
383 the log files to us will often help us to debug any problems.
348
384
349
385
350 .. [PBS] Portable Batch System. http://www.openpbs.org/
386 .. [PBS] Portable Batch System. http://www.openpbs.org/
351 .. [SSH] SSH-Agent http://en.wikipedia.org/wiki/Ssh-agent
387 .. [SSH] SSH-Agent http://en.wikipedia.org/wiki/Ssh-agent
@@ -1,363 +1,364 b''
1 .. _parallelsecurity:
1 .. _parallelsecurity:
2
2
3 ===========================
3 ===========================
4 Security details of IPython
4 Security details of IPython
5 ===========================
5 ===========================
6
6
7 IPython's :mod:`IPython.kernel` package exposes the full power of the Python
7 IPython's :mod:`IPython.kernel` package exposes the full power of the Python
8 interpreter over a TCP/IP network for the purposes of parallel computing. This
8 interpreter over a TCP/IP network for the purposes of parallel computing. This
9 feature brings up the important question of IPython's security model. This
9 feature brings up the important question of IPython's security model. This
10 document gives details about this model and how it is implemented in IPython's
10 document gives details about this model and how it is implemented in IPython's
11 architecture.
11 architecture.
12
12
13 Processs and network topology
13 Processs and network topology
14 =============================
14 =============================
15
15
16 To enable parallel computing, IPython has a number of different processes that
16 To enable parallel computing, IPython has a number of different processes that
17 run. These processes are discussed at length in the IPython documentation and
17 run. These processes are discussed at length in the IPython documentation and
18 are summarized here:
18 are summarized here:
19
19
20 * The IPython *engine*. This process is a full blown Python
20 * The IPython *engine*. This process is a full blown Python
21 interpreter in which user code is executed. Multiple
21 interpreter in which user code is executed. Multiple
22 engines are started to make parallel computing possible.
22 engines are started to make parallel computing possible.
23 * The IPython *controller*. This process manages a set of
23 * The IPython *controller*. This process manages a set of
24 engines, maintaining a queue for each and presenting
24 engines, maintaining a queue for each and presenting
25 an asynchronous interface to the set of engines.
25 an asynchronous interface to the set of engines.
26 * The IPython *client*. This process is typically an
26 * The IPython *client*. This process is typically an
27 interactive Python process that is used to coordinate the
27 interactive Python process that is used to coordinate the
28 engines to get a parallel computation done.
28 engines to get a parallel computation done.
29
29
30 Collectively, these three processes are called the IPython *kernel*.
30 Collectively, these three processes are called the IPython *kernel*.
31
31
32 These three processes communicate over TCP/IP connections with a well defined
32 These three processes communicate over TCP/IP connections with a well defined
33 topology. The IPython controller is the only process that listens on TCP/IP
33 topology. The IPython controller is the only process that listens on TCP/IP
34 sockets. Upon starting, an engine connects to a controller and registers
34 sockets. Upon starting, an engine connects to a controller and registers
35 itself with the controller. These engine/controller TCP/IP connections persist
35 itself with the controller. These engine/controller TCP/IP connections persist
36 for the lifetime of each engine.
36 for the lifetime of each engine.
37
37
38 The IPython client also connects to the controller using one or more TCP/IP
38 The IPython client also connects to the controller using one or more TCP/IP
39 connections. These connections persist for the lifetime of the client only.
39 connections. These connections persist for the lifetime of the client only.
40
40
41 A given IPython controller and set of engines typically has a relatively short
41 A given IPython controller and set of engines typically has a relatively short
42 lifetime. Typically this lifetime corresponds to the duration of a single
42 lifetime. Typically this lifetime corresponds to the duration of a single
43 parallel simulation performed by a single user. Finally, the controller,
43 parallel simulation performed by a single user. Finally, the controller,
44 engines and client processes typically execute with the permissions of that
44 engines and client processes typically execute with the permissions of that
45 same user. More specifically, the controller and engines are *not* executed as
45 same user. More specifically, the controller and engines are *not* executed as
46 root or with any other superuser permissions.
46 root or with any other superuser permissions.
47
47
48 Application logic
48 Application logic
49 =================
49 =================
50
50
51 When running the IPython kernel to perform a parallel computation, a user
51 When running the IPython kernel to perform a parallel computation, a user
52 utilizes the IPython client to send Python commands and data through the
52 utilizes the IPython client to send Python commands and data through the
53 IPython controller to the IPython engines, where those commands are executed
53 IPython controller to the IPython engines, where those commands are executed
54 and the data processed. The design of IPython ensures that the client is the
54 and the data processed. The design of IPython ensures that the client is the
55 only access point for the capabilities of the engines. That is, the only way of addressing the engines is through a client.
55 only access point for the capabilities of the engines. That is, the only way
56 of addressing the engines is through a client.
56
57
57 A user can utilize the client to instruct the IPython engines to execute
58 A user can utilize the client to instruct the IPython engines to execute
58 arbitrary Python commands. These Python commands can include calls to the
59 arbitrary Python commands. These Python commands can include calls to the
59 system shell, access the filesystem, etc., as required by the user's
60 system shell, access the filesystem, etc., as required by the user's
60 application code. From this perspective, when a user runs an IPython engine on
61 application code. From this perspective, when a user runs an IPython engine on
61 a host, that engine has the same capabilities and permissions as the user
62 a host, that engine has the same capabilities and permissions as the user
62 themselves (as if they were logged onto the engine's host with a terminal).
63 themselves (as if they were logged onto the engine's host with a terminal).
63
64
64 Secure network connections
65 Secure network connections
65 ==========================
66 ==========================
66
67
67 Overview
68 Overview
68 --------
69 --------
69
70
70 All TCP/IP connections between the client and controller as well as the
71 All TCP/IP connections between the client and controller as well as the
71 engines and controller are fully encrypted and authenticated. This section
72 engines and controller are fully encrypted and authenticated. This section
72 describes the details of the encryption and authentication approached used
73 describes the details of the encryption and authentication approached used
73 within IPython.
74 within IPython.
74
75
75 IPython uses the Foolscap network protocol [Foolscap]_ for all communications
76 IPython uses the Foolscap network protocol [Foolscap]_ for all communications
76 between processes. Thus, the details of IPython's security model are directly
77 between processes. Thus, the details of IPython's security model are directly
77 related to those of Foolscap. Thus, much of the following discussion is
78 related to those of Foolscap. Thus, much of the following discussion is
78 actually just a discussion of the security that is built in to Foolscap.
79 actually just a discussion of the security that is built in to Foolscap.
79
80
80 Encryption
81 Encryption
81 ----------
82 ----------
82
83
83 For encryption purposes, IPython and Foolscap use the well known Secure Socket
84 For encryption purposes, IPython and Foolscap use the well known Secure Socket
84 Layer (SSL) protocol [RFC5246]_. We use the implementation of this protocol
85 Layer (SSL) protocol [RFC5246]_. We use the implementation of this protocol
85 provided by the OpenSSL project through the pyOpenSSL [pyOpenSSL]_ Python
86 provided by the OpenSSL project through the pyOpenSSL [pyOpenSSL]_ Python
86 bindings to OpenSSL.
87 bindings to OpenSSL.
87
88
88 Authentication
89 Authentication
89 --------------
90 --------------
90
91
91 IPython clients and engines must also authenticate themselves with the
92 IPython clients and engines must also authenticate themselves with the
92 controller. This is handled in a capabilities based security model
93 controller. This is handled in a capabilities based security model
93 [Capability]_. In this model, the controller creates a strong cryptographic
94 [Capability]_. In this model, the controller creates a strong cryptographic
94 key or token that represents each set of capability that the controller
95 key or token that represents each set of capability that the controller
95 offers. Any party who has this key and presents it to the controller has full
96 offers. Any party who has this key and presents it to the controller has full
96 access to the corresponding capabilities of the controller. This model is
97 access to the corresponding capabilities of the controller. This model is
97 analogous to using a physical key to gain access to physical items
98 analogous to using a physical key to gain access to physical items
98 (capabilities) behind a locked door.
99 (capabilities) behind a locked door.
99
100
100 For a capabilities based authentication system to prevent unauthorized access,
101 For a capabilities based authentication system to prevent unauthorized access,
101 two things must be ensured:
102 two things must be ensured:
102
103
103 * The keys must be cryptographically strong. Otherwise attackers could gain
104 * The keys must be cryptographically strong. Otherwise attackers could gain
104 access by a simple brute force key guessing attack.
105 access by a simple brute force key guessing attack.
105 * The actual keys must be distributed only to authorized parties.
106 * The actual keys must be distributed only to authorized parties.
106
107
107 The keys in Foolscap are called Foolscap URL's or FURLs. The following section
108 The keys in Foolscap are called Foolscap URL's or FURLs. The following section
108 gives details about how these FURLs are created in Foolscap. The IPython
109 gives details about how these FURLs are created in Foolscap. The IPython
109 controller creates a number of FURLs for different purposes:
110 controller creates a number of FURLs for different purposes:
110
111
111 * One FURL that grants IPython engines access to the controller. Also
112 * One FURL that grants IPython engines access to the controller. Also
112 implicit in this access is permission to execute code sent by an
113 implicit in this access is permission to execute code sent by an
113 authenticated IPython client.
114 authenticated IPython client.
114 * Two or more FURLs that grant IPython clients access to the controller.
115 * Two or more FURLs that grant IPython clients access to the controller.
115 Implicit in this access is permission to give the controller's engine code
116 Implicit in this access is permission to give the controller's engine code
116 to execute.
117 to execute.
117
118
118 Upon starting, the controller creates these different FURLS and writes them
119 Upon starting, the controller creates these different FURLS and writes them
119 files in the user-read-only directory :file:`$HOME/.ipython/security`. Thus, only the
120 files in the user-read-only directory :file:`$HOME/.ipython/security`. Thus,
120 user who starts the controller has access to the FURLs.
121 only the user who starts the controller has access to the FURLs.
121
122
122 For an IPython client or engine to authenticate with a controller, it must
123 For an IPython client or engine to authenticate with a controller, it must
123 present the appropriate FURL to the controller upon connecting. If the
124 present the appropriate FURL to the controller upon connecting. If the
124 FURL matches what the controller expects for a given capability, access is
125 FURL matches what the controller expects for a given capability, access is
125 granted. If not, access is denied. The exchange of FURLs is done after
126 granted. If not, access is denied. The exchange of FURLs is done after
126 encrypted communications channels have been established to prevent attackers
127 encrypted communications channels have been established to prevent attackers
127 from capturing them.
128 from capturing them.
128
129
129 .. note::
130 .. note::
130
131
131 The FURL is similar to an unsigned private key in SSH.
132 The FURL is similar to an unsigned private key in SSH.
132
133
133 Details of the Foolscap handshake
134 Details of the Foolscap handshake
134 ---------------------------------
135 ---------------------------------
135
136
136 In this section we detail the precise security handshake that takes place at
137 In this section we detail the precise security handshake that takes place at
137 the beginning of any network connection in IPython. For the purposes of this
138 the beginning of any network connection in IPython. For the purposes of this
138 discussion, the SERVER is the IPython controller process and the CLIENT is the
139 discussion, the SERVER is the IPython controller process and the CLIENT is the
139 IPython engine or client process.
140 IPython engine or client process.
140
141
141 Upon starting, all IPython processes do the following:
142 Upon starting, all IPython processes do the following:
142
143
143 1. Create a public key x509 certificate (ISO/IEC 9594).
144 1. Create a public key x509 certificate (ISO/IEC 9594).
144 2. Create a hash of the contents of the certificate using the SHA-1 algorithm.
145 2. Create a hash of the contents of the certificate using the SHA-1 algorithm.
145 The base-32 encoded version of this hash is saved by the process as its
146 The base-32 encoded version of this hash is saved by the process as its
146 process id (actually in Foolscap, this is the Tub id, but here refer to
147 process id (actually in Foolscap, this is the Tub id, but here refer to
147 it as the process id).
148 it as the process id).
148
149
149 Upon starting, the IPython controller also does the following:
150 Upon starting, the IPython controller also does the following:
150
151
151 1. Save the x509 certificate to disk in a secure location. The CLIENT
152 1. Save the x509 certificate to disk in a secure location. The CLIENT
152 certificate is never saved to disk.
153 certificate is never saved to disk.
153 2. Create a FURL for each capability that the controller has. There are
154 2. Create a FURL for each capability that the controller has. There are
154 separate capabilities the controller offers for clients and engines. The
155 separate capabilities the controller offers for clients and engines. The
155 FURL is created using: a) the process id of the SERVER, b) the IP
156 FURL is created using: a) the process id of the SERVER, b) the IP
156 address and port the SERVER is listening on and c) a 160 bit,
157 address and port the SERVER is listening on and c) a 160 bit,
157 cryptographically secure string that represents the capability (the
158 cryptographically secure string that represents the capability (the
158 "capability id").
159 "capability id").
159 3. The FURLs are saved to disk in a secure location on the SERVER's host.
160 3. The FURLs are saved to disk in a secure location on the SERVER's host.
160
161
161 For a CLIENT to be able to connect to the SERVER and access a capability of
162 For a CLIENT to be able to connect to the SERVER and access a capability of
162 that SERVER, the CLIENT must have knowledge of the FURL for that SERVER's
163 that SERVER, the CLIENT must have knowledge of the FURL for that SERVER's
163 capability. This typically requires that the file containing the FURL be
164 capability. This typically requires that the file containing the FURL be
164 moved from the SERVER's host to the CLIENT's host. This is done by the end
165 moved from the SERVER's host to the CLIENT's host. This is done by the end
165 user who started the SERVER and wishes to have a CLIENT connect to the SERVER.
166 user who started the SERVER and wishes to have a CLIENT connect to the SERVER.
166
167
167 When a CLIENT connects to the SERVER, the following handshake protocol takes
168 When a CLIENT connects to the SERVER, the following handshake protocol takes
168 place:
169 place:
169
170
170 1. The CLIENT tells the SERVER what process (or Tub) id it expects the SERVER
171 1. The CLIENT tells the SERVER what process (or Tub) id it expects the SERVER
171 to have.
172 to have.
172 2. If the SERVER has that process id, it notifies the CLIENT that it will now
173 2. If the SERVER has that process id, it notifies the CLIENT that it will now
173 enter encrypted mode. If the SERVER has a different id, the SERVER aborts.
174 enter encrypted mode. If the SERVER has a different id, the SERVER aborts.
174 3. Both CLIENT and SERVER initiate the SSL handshake protocol.
175 3. Both CLIENT and SERVER initiate the SSL handshake protocol.
175 4. Both CLIENT and SERVER request the certificate of their peer and verify
176 4. Both CLIENT and SERVER request the certificate of their peer and verify
176 that certificate. If this succeeds, all further communications are
177 that certificate. If this succeeds, all further communications are
177 encrypted.
178 encrypted.
178 5. Both CLIENT and SERVER send a hello block containing connection parameters
179 5. Both CLIENT and SERVER send a hello block containing connection parameters
179 and their process id.
180 and their process id.
180 6. The CLIENT and SERVER check that their peer's stated process id matches the
181 6. The CLIENT and SERVER check that their peer's stated process id matches the
181 hash of the x509 certificate the peer presented. If not, the connection is
182 hash of the x509 certificate the peer presented. If not, the connection is
182 aborted.
183 aborted.
183 7. The CLIENT verifies that the SERVER's stated id matches the id of the
184 7. The CLIENT verifies that the SERVER's stated id matches the id of the
184 SERVER the CLIENT is intending to connect to. If not, the connection is
185 SERVER the CLIENT is intending to connect to. If not, the connection is
185 aborted.
186 aborted.
186 8. The CLIENT and SERVER elect a master who decides on the final connection
187 8. The CLIENT and SERVER elect a master who decides on the final connection
187 parameters.
188 parameters.
188
189
189 The public/private key pair associated with each process's x509 certificate
190 The public/private key pair associated with each process's x509 certificate
190 are completely hidden from this handshake protocol. There are however, used
191 are completely hidden from this handshake protocol. There are however, used
191 internally by OpenSSL as part of the SSL handshake protocol. Each process
192 internally by OpenSSL as part of the SSL handshake protocol. Each process
192 keeps their own private key hidden and sends its peer only the public key
193 keeps their own private key hidden and sends its peer only the public key
193 (embedded in the certificate).
194 (embedded in the certificate).
194
195
195 Finally, when the CLIENT requests access to a particular SERVER capability,
196 Finally, when the CLIENT requests access to a particular SERVER capability,
196 the following happens:
197 the following happens:
197
198
198 1. The CLIENT asks the SERVER for access to a capability by presenting that
199 1. The CLIENT asks the SERVER for access to a capability by presenting that
199 capabilities id.
200 capabilities id.
200 2. If the SERVER has a capability with that id, access is granted. If not,
201 2. If the SERVER has a capability with that id, access is granted. If not,
201 access is not granted.
202 access is not granted.
202 3. Once access has been gained, the CLIENT can use the capability.
203 3. Once access has been gained, the CLIENT can use the capability.
203
204
204 Specific security vulnerabilities
205 Specific security vulnerabilities
205 =================================
206 =================================
206
207
207 There are a number of potential security vulnerabilities present in IPython's
208 There are a number of potential security vulnerabilities present in IPython's
208 architecture. In this section we discuss those vulnerabilities and detail how
209 architecture. In this section we discuss those vulnerabilities and detail how
209 the security architecture described above prevents them from being exploited.
210 the security architecture described above prevents them from being exploited.
210
211
211 Unauthorized clients
212 Unauthorized clients
212 --------------------
213 --------------------
213
214
214 The IPython client can instruct the IPython engines to execute arbitrary
215 The IPython client can instruct the IPython engines to execute arbitrary
215 Python code with the permissions of the user who started the engines. If an
216 Python code with the permissions of the user who started the engines. If an
216 attacker were able to connect their own hostile IPython client to the IPython
217 attacker were able to connect their own hostile IPython client to the IPython
217 controller, they could instruct the engines to execute code.
218 controller, they could instruct the engines to execute code.
218
219
219 This attack is prevented by the capabilities based client authentication
220 This attack is prevented by the capabilities based client authentication
220 performed after the encrypted channel has been established. The relevant
221 performed after the encrypted channel has been established. The relevant
221 authentication information is encoded into the FURL that clients must
222 authentication information is encoded into the FURL that clients must
222 present to gain access to the IPython controller. By limiting the distribution
223 present to gain access to the IPython controller. By limiting the distribution
223 of those FURLs, a user can grant access to only authorized persons.
224 of those FURLs, a user can grant access to only authorized persons.
224
225
225 It is highly unlikely that a client FURL could be guessed by an attacker
226 It is highly unlikely that a client FURL could be guessed by an attacker
226 in a brute force guessing attack. A given instance of the IPython controller
227 in a brute force guessing attack. A given instance of the IPython controller
227 only runs for a relatively short amount of time (on the order of hours). Thus
228 only runs for a relatively short amount of time (on the order of hours). Thus
228 an attacker would have only a limited amount of time to test a search space of
229 an attacker would have only a limited amount of time to test a search space of
229 size 2**320. Furthermore, even if a controller were to run for a longer amount
230 size 2**320. Furthermore, even if a controller were to run for a longer amount
230 of time, this search space is quite large (larger for instance than that of
231 of time, this search space is quite large (larger for instance than that of
231 typical username/password pair).
232 typical username/password pair).
232
233
233 Unauthorized engines
234 Unauthorized engines
234 --------------------
235 --------------------
235
236
236 If an attacker were able to connect a hostile engine to a user's controller,
237 If an attacker were able to connect a hostile engine to a user's controller,
237 the user might unknowingly send sensitive code or data to the hostile engine.
238 the user might unknowingly send sensitive code or data to the hostile engine.
238 This attacker's engine would then have full access to that code and data.
239 This attacker's engine would then have full access to that code and data.
239
240
240 This type of attack is prevented in the same way as the unauthorized client
241 This type of attack is prevented in the same way as the unauthorized client
241 attack, through the usage of the capabilities based authentication scheme.
242 attack, through the usage of the capabilities based authentication scheme.
242
243
243 Unauthorized controllers
244 Unauthorized controllers
244 ------------------------
245 ------------------------
245
246
246 It is also possible that an attacker could try to convince a user's IPython
247 It is also possible that an attacker could try to convince a user's IPython
247 client or engine to connect to a hostile IPython controller. That controller
248 client or engine to connect to a hostile IPython controller. That controller
248 would then have full access to the code and data sent between the IPython
249 would then have full access to the code and data sent between the IPython
249 client and the IPython engines.
250 client and the IPython engines.
250
251
251 Again, this attack is prevented through the FURLs, which ensure that a
252 Again, this attack is prevented through the FURLs, which ensure that a
252 client or engine connects to the correct controller. It is also important to
253 client or engine connects to the correct controller. It is also important to
253 note that the FURLs also encode the IP address and port that the
254 note that the FURLs also encode the IP address and port that the
254 controller is listening on, so there is little chance of mistakenly connecting
255 controller is listening on, so there is little chance of mistakenly connecting
255 to a controller running on a different IP address and port.
256 to a controller running on a different IP address and port.
256
257
257 When starting an engine or client, a user must specify which FURL to use
258 When starting an engine or client, a user must specify which FURL to use
258 for that connection. Thus, in order to introduce a hostile controller, the
259 for that connection. Thus, in order to introduce a hostile controller, the
259 attacker must convince the user to use the FURLs associated with the
260 attacker must convince the user to use the FURLs associated with the
260 hostile controller. As long as a user is diligent in only using FURLs from
261 hostile controller. As long as a user is diligent in only using FURLs from
261 trusted sources, this attack is not possible.
262 trusted sources, this attack is not possible.
262
263
263 Other security measures
264 Other security measures
264 =======================
265 =======================
265
266
266 A number of other measures are taken to further limit the security risks
267 A number of other measures are taken to further limit the security risks
267 involved in running the IPython kernel.
268 involved in running the IPython kernel.
268
269
269 First, by default, the IPython controller listens on random port numbers.
270 First, by default, the IPython controller listens on random port numbers.
270 While this can be overridden by the user, in the default configuration, an
271 While this can be overridden by the user, in the default configuration, an
271 attacker would have to do a port scan to even find a controller to attack.
272 attacker would have to do a port scan to even find a controller to attack.
272 When coupled with the relatively short running time of a typical controller
273 When coupled with the relatively short running time of a typical controller
273 (on the order of hours), an attacker would have to work extremely hard and
274 (on the order of hours), an attacker would have to work extremely hard and
274 extremely *fast* to even find a running controller to attack.
275 extremely *fast* to even find a running controller to attack.
275
276
276 Second, much of the time, especially when run on supercomputers or clusters,
277 Second, much of the time, especially when run on supercomputers or clusters,
277 the controller is running behind a firewall. Thus, for engines or client to
278 the controller is running behind a firewall. Thus, for engines or client to
278 connect to the controller:
279 connect to the controller:
279
280
280 * The different processes have to all be behind the firewall.
281 * The different processes have to all be behind the firewall.
281
282
282 or:
283 or:
283
284
284 * The user has to use SSH port forwarding to tunnel the
285 * The user has to use SSH port forwarding to tunnel the
285 connections through the firewall.
286 connections through the firewall.
286
287
287 In either case, an attacker is presented with addition barriers that prevent
288 In either case, an attacker is presented with addition barriers that prevent
288 attacking or even probing the system.
289 attacking or even probing the system.
289
290
290 Summary
291 Summary
291 =======
292 =======
292
293
293 IPython's architecture has been carefully designed with security in mind. The
294 IPython's architecture has been carefully designed with security in mind. The
294 capabilities based authentication model, in conjunction with the encrypted
295 capabilities based authentication model, in conjunction with the encrypted
295 TCP/IP channels, address the core potential vulnerabilities in the system,
296 TCP/IP channels, address the core potential vulnerabilities in the system,
296 while still enabling user's to use the system in open networks.
297 while still enabling user's to use the system in open networks.
297
298
298 Other questions
299 Other questions
299 ===============
300 ===============
300
301
301 About keys
302 About keys
302 ----------
303 ----------
303
304
304 Can you clarify the roles of the certificate and its keys versus the FURL,
305 Can you clarify the roles of the certificate and its keys versus the FURL,
305 which is also called a key?
306 which is also called a key?
306
307
307 The certificate created by IPython processes is a standard public key x509
308 The certificate created by IPython processes is a standard public key x509
308 certificate, that is used by the SSL handshake protocol to setup encrypted
309 certificate, that is used by the SSL handshake protocol to setup encrypted
309 channel between the controller and the IPython engine or client. This public
310 channel between the controller and the IPython engine or client. This public
310 and private key associated with this certificate are used only by the SSL
311 and private key associated with this certificate are used only by the SSL
311 handshake protocol in setting up this encrypted channel.
312 handshake protocol in setting up this encrypted channel.
312
313
313 The FURL serves a completely different and independent purpose from the
314 The FURL serves a completely different and independent purpose from the
314 key pair associated with the certificate. When we refer to a FURL as a
315 key pair associated with the certificate. When we refer to a FURL as a
315 key, we are using the word "key" in the capabilities based security model
316 key, we are using the word "key" in the capabilities based security model
316 sense. This has nothing to do with "key" in the public/private key sense used
317 sense. This has nothing to do with "key" in the public/private key sense used
317 in the SSL protocol.
318 in the SSL protocol.
318
319
319 With that said the FURL is used as an cryptographic key, to grant
320 With that said the FURL is used as an cryptographic key, to grant
320 IPython engines and clients access to particular capabilities that the
321 IPython engines and clients access to particular capabilities that the
321 controller offers.
322 controller offers.
322
323
323 Self signed certificates
324 Self signed certificates
324 ------------------------
325 ------------------------
325
326
326 Is the controller creating a self-signed certificate? Is this created for per
327 Is the controller creating a self-signed certificate? Is this created for per
327 instance/session, one-time-setup or each-time the controller is started?
328 instance/session, one-time-setup or each-time the controller is started?
328
329
329 The Foolscap network protocol, which handles the SSL protocol details, creates
330 The Foolscap network protocol, which handles the SSL protocol details, creates
330 a self-signed x509 certificate using OpenSSL for each IPython process. The
331 a self-signed x509 certificate using OpenSSL for each IPython process. The
331 lifetime of the certificate is handled differently for the IPython controller
332 lifetime of the certificate is handled differently for the IPython controller
332 and the engines/client.
333 and the engines/client.
333
334
334 For the IPython engines and client, the certificate is only held in memory for
335 For the IPython engines and client, the certificate is only held in memory for
335 the lifetime of its process. It is never written to disk.
336 the lifetime of its process. It is never written to disk.
336
337
337 For the controller, the certificate can be created anew each time the
338 For the controller, the certificate can be created anew each time the
338 controller starts or it can be created once and reused each time the
339 controller starts or it can be created once and reused each time the
339 controller starts. If at any point, the certificate is deleted, a new one is
340 controller starts. If at any point, the certificate is deleted, a new one is
340 created the next time the controller starts.
341 created the next time the controller starts.
341
342
342 SSL private key
343 SSL private key
343 ---------------
344 ---------------
344
345
345 How the private key (associated with the certificate) is distributed?
346 How the private key (associated with the certificate) is distributed?
346
347
347 In the usual implementation of the SSL protocol, the private key is never
348 In the usual implementation of the SSL protocol, the private key is never
348 distributed. We follow this standard always.
349 distributed. We follow this standard always.
349
350
350 SSL versus Foolscap authentication
351 SSL versus Foolscap authentication
351 ----------------------------------
352 ----------------------------------
352
353
353 Many SSL connections only perform one sided authentication (the server to the
354 Many SSL connections only perform one sided authentication (the server to the
354 client). How is the client authentication in IPython's system related to SSL
355 client). How is the client authentication in IPython's system related to SSL
355 authentication?
356 authentication?
356
357
357 We perform a two way SSL handshake in which both parties request and verify
358 We perform a two way SSL handshake in which both parties request and verify
358 the certificate of their peer. This mutual authentication is handled by the
359 the certificate of their peer. This mutual authentication is handled by the
359 SSL handshake and is separate and independent from the additional
360 SSL handshake and is separate and independent from the additional
360 authentication steps that the CLIENT and SERVER perform after an encrypted
361 authentication steps that the CLIENT and SERVER perform after an encrypted
361 channel is established.
362 channel is established.
362
363
363 .. [RFC5246] <http://tools.ietf.org/html/rfc5246>
364 .. [RFC5246] <http://tools.ietf.org/html/rfc5246>
@@ -1,99 +1,120 b''
1 .. _paralleltask:
1 .. _paralleltask:
2
2
3 ==========================
3 ==========================
4 The IPython task interface
4 The IPython task interface
5 ==========================
5 ==========================
6
6
7 The task interface to the controller presents the engines as a fault tolerant, dynamic load-balanced system or workers. Unlike the multiengine interface, in the task interface, the user have no direct access to individual engines. In some ways, this interface is simpler, but in other ways it is more powerful.
7 The task interface to the controller presents the engines as a fault tolerant,
8
8 dynamic load-balanced system or workers. Unlike the multiengine interface, in
9 Best of all the user can use both of these interfaces running at the same time to take advantage or both of their strengths. When the user can break up the user's work into segments that do not depend on previous execution, the task interface is ideal. But it also has more power and flexibility, allowing the user to guide the distribution of jobs, without having to assign tasks to engines explicitly.
9 the task interface, the user have no direct access to individual engines. In
10 some ways, this interface is simpler, but in other ways it is more powerful.
11
12 Best of all the user can use both of these interfaces running at the same time
13 to take advantage or both of their strengths. When the user can break up the
14 user's work into segments that do not depend on previous execution, the task
15 interface is ideal. But it also has more power and flexibility, allowing the
16 user to guide the distribution of jobs, without having to assign tasks to
17 engines explicitly.
10
18
11 Starting the IPython controller and engines
19 Starting the IPython controller and engines
12 ===========================================
20 ===========================================
13
21
14 To follow along with this tutorial, you will need to start the IPython
22 To follow along with this tutorial, you will need to start the IPython
15 controller and four IPython engines. The simplest way of doing this is to use
23 controller and four IPython engines. The simplest way of doing this is to use
16 the :command:`ipcluster` command::
24 the :command:`ipcluster` command::
17
25
18 $ ipcluster local -n 4
26 $ ipcluster local -n 4
19
27
20 For more detailed information about starting the controller and engines, see
28 For more detailed information about starting the controller and engines, see
21 our :ref:`introduction <ip1par>` to using IPython for parallel computing.
29 our :ref:`introduction <ip1par>` to using IPython for parallel computing.
22
30
23 Creating a ``TaskClient`` instance
31 Creating a ``TaskClient`` instance
24 =========================================
32 =========================================
25
33
26 The first step is to import the IPython :mod:`IPython.kernel.client` module
34 The first step is to import the IPython :mod:`IPython.kernel.client` module
27 and then create a :class:`TaskClient` instance:
35 and then create a :class:`TaskClient` instance:
28
36
29 .. sourcecode:: ipython
37 .. sourcecode:: ipython
30
38
31 In [1]: from IPython.kernel import client
39 In [1]: from IPython.kernel import client
32
40
33 In [2]: tc = client.TaskClient()
41 In [2]: tc = client.TaskClient()
34
42
35 This form assumes that the :file:`ipcontroller-tc.furl` is in the
43 This form assumes that the :file:`ipcontroller-tc.furl` is in the
36 :file:`~./ipython/security` directory on the client's host. If not, the
44 :file:`~./ipython/security` directory on the client's host. If not, the
37 location of the FURL file must be given as an argument to the
45 location of the FURL file must be given as an argument to the
38 constructor:
46 constructor:
39
47
40 .. sourcecode:: ipython
48 .. sourcecode:: ipython
41
49
42 In [2]: mec = client.TaskClient('/path/to/my/ipcontroller-tc.furl')
50 In [2]: mec = client.TaskClient('/path/to/my/ipcontroller-tc.furl')
43
51
44 Quick and easy parallelism
52 Quick and easy parallelism
45 ==========================
53 ==========================
46
54
47 In many cases, you simply want to apply a Python function to a sequence of objects, but *in parallel*. Like the multiengine interface, the task interface provides two simple ways of accomplishing this: a parallel version of :func:`map` and ``@parallel`` function decorator. However, the verions in the task interface have one important difference: they are dynamically load balanced. Thus, if the execution time per item varies significantly, you should use the versions in the task interface.
55 In many cases, you simply want to apply a Python function to a sequence of
56 objects, but *in parallel*. Like the multiengine interface, the task interface
57 provides two simple ways of accomplishing this: a parallel version of
58 :func:`map` and ``@parallel`` function decorator. However, the verions in the
59 task interface have one important difference: they are dynamically load
60 balanced. Thus, if the execution time per item varies significantly, you
61 should use the versions in the task interface.
48
62
49 Parallel map
63 Parallel map
50 ------------
64 ------------
51
65
52 The parallel :meth:`map` in the task interface is similar to that in the multiengine interface:
66 The parallel :meth:`map` in the task interface is similar to that in the
67 multiengine interface:
53
68
54 .. sourcecode:: ipython
69 .. sourcecode:: ipython
55
70
56 In [63]: serial_result = map(lambda x:x**10, range(32))
71 In [63]: serial_result = map(lambda x:x**10, range(32))
57
72
58 In [64]: parallel_result = tc.map(lambda x:x**10, range(32))
73 In [64]: parallel_result = tc.map(lambda x:x**10, range(32))
59
74
60 In [65]: serial_result==parallel_result
75 In [65]: serial_result==parallel_result
61 Out[65]: True
76 Out[65]: True
62
77
63 Parallel function decorator
78 Parallel function decorator
64 ---------------------------
79 ---------------------------
65
80
66 Parallel functions are just like normal function, but they can be called on sequences and *in parallel*. The multiengine interface provides a decorator that turns any Python function into a parallel function:
81 Parallel functions are just like normal function, but they can be called on
82 sequences and *in parallel*. The multiengine interface provides a decorator
83 that turns any Python function into a parallel function:
67
84
68 .. sourcecode:: ipython
85 .. sourcecode:: ipython
69
86
70 In [10]: @tc.parallel()
87 In [10]: @tc.parallel()
71 ....: def f(x):
88 ....: def f(x):
72 ....: return 10.0*x**4
89 ....: return 10.0*x**4
73 ....:
90 ....:
74
91
75 In [11]: f(range(32)) # this is done in parallel
92 In [11]: f(range(32)) # this is done in parallel
76 Out[11]:
93 Out[11]:
77 [0.0,10.0,160.0,...]
94 [0.0,10.0,160.0,...]
78
95
79 More details
96 More details
80 ============
97 ============
81
98
82 The :class:`TaskClient` has many more powerful features that allow quite a bit of flexibility in how tasks are defined and run. The next places to look are in the following classes:
99 The :class:`TaskClient` has many more powerful features that allow quite a bit
100 of flexibility in how tasks are defined and run. The next places to look are
101 in the following classes:
83
102
84 * :class:`IPython.kernel.client.TaskClient`
103 * :class:`IPython.kernel.client.TaskClient`
85 * :class:`IPython.kernel.client.StringTask`
104 * :class:`IPython.kernel.client.StringTask`
86 * :class:`IPython.kernel.client.MapTask`
105 * :class:`IPython.kernel.client.MapTask`
87
106
88 The following is an overview of how to use these classes together:
107 The following is an overview of how to use these classes together:
89
108
90 1. Create a :class:`TaskClient`.
109 1. Create a :class:`TaskClient`.
91 2. Create one or more instances of :class:`StringTask` or :class:`MapTask`
110 2. Create one or more instances of :class:`StringTask` or :class:`MapTask`
92 to define your tasks.
111 to define your tasks.
93 3. Submit your tasks to using the :meth:`run` method of your
112 3. Submit your tasks to using the :meth:`run` method of your
94 :class:`TaskClient` instance.
113 :class:`TaskClient` instance.
95 4. Use :meth:`TaskClient.get_task_result` to get the results of the
114 4. Use :meth:`TaskClient.get_task_result` to get the results of the
96 tasks.
115 tasks.
97
116
98 We are in the process of developing more detailed information about the task interface. For now, the docstrings of the :class:`TaskClient`, :class:`StringTask` and :class:`MapTask` classes should be consulted.
117 We are in the process of developing more detailed information about the task
118 interface. For now, the docstrings of the :class:`TaskClient`,
119 :class:`StringTask` and :class:`MapTask` classes should be consulted.
99
120
1 NO CONTENT: file was removed, binary diff hidden
NO CONTENT: file was removed, binary diff hidden
1 NO CONTENT: file was removed, binary diff hidden
NO CONTENT: file was removed, binary diff hidden
1 NO CONTENT: file was removed
NO CONTENT: file was removed
General Comments 0
You need to be logged in to leave comments. Login now