##// END OF EJS Templates
General work on inputhook and the docs....
Brian Granger -
Show More

The requested changes are too big and content was truncated. Show full diff

1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
@@ -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 No newline at end of file
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