|
@@
-1,583
+1,636
b''
|
|
1
|
1
|
=============
|
|
2
|
2
|
0.13 Series
|
|
3
|
3
|
=============
|
|
4
|
4
|
|
|
5
|
5
|
Release 0.13
|
|
6
|
6
|
============
|
|
7
|
7
|
|
|
8
|
8
|
IPython 0.13 contains several major new features, as well as a large amount of
|
|
9
|
9
|
bug and regression fixes. The previous version (0.12) was released on December
|
|
10
|
10
|
19 2011, so this release cycle was roughly 6 months long, during which we
|
|
11
|
11
|
closed a total of 373 pull requests and 742 issues, with contributions from 62
|
|
12
|
12
|
authors comprising over 1740 commits.
|
|
13
|
13
|
|
|
14
|
14
|
The amount of work included in this release is so large, that we can only cover
|
|
15
|
15
|
here the main highlights; please see our :ref:`detailed release statistics
|
|
16
|
16
|
<issues_list_013>` for links to every issue and pull request closed on GitHub.
|
|
17
|
17
|
|
|
18
|
18
|
|
|
19
|
19
|
Major Notebook improvements: new user interface and more
|
|
20
|
20
|
--------------------------------------------------------
|
|
21
|
21
|
|
|
22
|
22
|
The IPython Notebook, which has proven since its release to be wildly popular,
|
|
23
|
23
|
has seen a massive amount of work in this release cycle, leading to a
|
|
24
|
24
|
significantly improved user experience as well as many new features.
|
|
25
|
25
|
|
|
26
|
26
|
The first user-visible change is a reorganization of the user interface; the
|
|
27
|
27
|
left panel has been removed and was replaced by a real menu system and a
|
|
28
|
28
|
toolbar with icons. Both the toolbar and the header above the menu can be
|
|
29
|
29
|
collapsed to leave an unobstructed working area:
|
|
30
|
30
|
|
|
31
|
31
|
.. image:: ../_static/ipy_013_notebook_spectrogram.png
|
|
32
|
32
|
:width: 460px
|
|
33
|
33
|
:alt: New user interface for Notebook
|
|
34
|
34
|
:align: center
|
|
35
|
35
|
:target: ../_static/ipy_013_notebook_spectrogram.png
|
|
36
|
36
|
|
|
37
|
37
|
The notebook handles very long outputs much better than before (this was a
|
|
38
|
38
|
serious usability issue when running processes that generated massive amounts
|
|
39
|
39
|
of output). Now, in the presence of outputs longer than ~100 lines, the
|
|
40
|
40
|
notebook will automatically collapse to a scrollable area and the entire left
|
|
41
|
41
|
part of this area controls the display: one click in this area will expand the
|
|
42
|
42
|
output region completely, and a double-click will hide it completely. This
|
|
43
|
43
|
figure shows both the scrolled and hidden modes:
|
|
44
|
44
|
|
|
45
|
45
|
.. image:: ../_static/ipy_013_notebook_long_out.png
|
|
46
|
46
|
:width: 460px
|
|
47
|
47
|
:alt: Scrolling and hiding of long output in the notebook.
|
|
48
|
48
|
:align: center
|
|
49
|
49
|
:target: ../_static/ipy_013_notebook_long_out.png
|
|
50
|
50
|
|
|
51
|
51
|
.. note::
|
|
52
|
52
|
|
|
53
|
53
|
The auto-folding of long outputs is disabled in Firefox due to bugs in its
|
|
54
|
54
|
scrolling behavior. See :ghpull:`2047` for details.
|
|
55
|
55
|
|
|
56
|
56
|
Uploading notebooks to the dashboard is now easier: in addition to drag and
|
|
57
|
57
|
drop (which can be finicky sometimes), you can now click on the upload text and
|
|
58
|
58
|
use a regular file dialog box to select notebooks to upload. Furthermore, the
|
|
59
|
59
|
notebook dashboard now auto-refreshes its contents and offers buttons to shut
|
|
60
|
60
|
down any running kernels (:ghpull:`1739`):
|
|
61
|
61
|
|
|
62
|
62
|
.. image:: ../_static/ipy_013_dashboard.png
|
|
63
|
63
|
:width: 460px
|
|
64
|
64
|
:alt: Improved dashboard
|
|
65
|
65
|
:align: center
|
|
66
|
66
|
:target: ../_static/ipy_013_dashboard.png
|
|
67
|
67
|
|
|
68
|
68
|
|
|
69
|
69
|
Cluster management
|
|
70
|
70
|
~~~~~~~~~~~~~~~~~~
|
|
71
|
71
|
|
|
72
|
72
|
The notebook dashboard can now also start and stop clusters, and you can
|
|
73
|
73
|
override the number of engines started. There is a new tab in the dashboard
|
|
74
|
74
|
user interface:
|
|
75
|
75
|
|
|
76
|
76
|
.. image:: ../_static/ipy_013_dashboard_cluster.png
|
|
77
|
77
|
:width: 460px
|
|
78
|
78
|
:alt: Cluster management from the notebook dashboard
|
|
79
|
79
|
:align: center
|
|
80
|
80
|
:target: ../_static/ipy_013_dashboard_cluster.png
|
|
81
|
81
|
|
|
82
|
82
|
This tab allows you, for each profile you have configured, to start and stop a
|
|
83
|
83
|
cluster (and optionally override the default number of engines corresponding to
|
|
84
|
84
|
that configuration). While this hides all error reporting, once you have a
|
|
85
|
85
|
configuration that you know works smoothly, it is a very convenient interface
|
|
86
|
86
|
for controlling your parallel resources.
|
|
87
|
87
|
|
|
88
|
88
|
|
|
89
|
89
|
New notebook format
|
|
90
|
90
|
~~~~~~~~~~~~~~~~~~~
|
|
91
|
91
|
|
|
92
|
92
|
The notebooks saved now use version 3 of our format, which supports heading
|
|
93
|
93
|
levels as well as the concept of 'raw' text cells that are not rendered as
|
|
94
|
94
|
Markdown. These will be useful with converters_ we are developing, to pass raw
|
|
95
|
95
|
markup (say LaTeX). That conversion code is still under heavy development and
|
|
96
|
96
|
not quite ready for prime time, but we welcome help on this front so that we
|
|
97
|
97
|
can merge it for full production use as soon as possible.
|
|
98
|
98
|
|
|
99
|
99
|
.. _converters: https://github.com/ipython/nbconvert
|
|
100
|
100
|
|
|
101
|
101
|
.. note::
|
|
102
|
102
|
|
|
103
|
103
|
v3 notebooks can *not* be read by older versions of IPython, but we provide
|
|
104
|
104
|
a `simple script`_ that you can use in case you need to export a v3
|
|
105
|
105
|
notebook to share with a v2 user.
|
|
106
|
106
|
|
|
107
|
107
|
.. _simple script: https://gist.github.com/1935808
|
|
108
|
108
|
|
|
109
|
109
|
|
|
110
|
110
|
JavaScript refactoring
|
|
111
|
111
|
~~~~~~~~~~~~~~~~~~~~~~
|
|
112
|
112
|
|
|
113
|
113
|
All the client-side JavaScript has been decoupled to ease reuse of parts of the
|
|
114
|
114
|
machinery without having to build a full-blown notebook. This will make it much
|
|
115
|
115
|
easier to communicate with an IPython kernel from existing web pages and to
|
|
116
|
116
|
integrate single cells into other sites, without loading the full notebook
|
|
117
|
117
|
document-like UI. :ghpull:`1711`.
|
|
118
|
118
|
|
|
119
|
119
|
This refactoring also enables the possibility of writing dynamic javascript
|
|
120
|
120
|
widgets that are returned from Python code and that present an interactive view
|
|
121
|
121
|
to the user, with callbacks in Javascript executing calls to the Kernel. This
|
|
122
|
122
|
will enable many interactive elements to be added by users in notebooks.
|
|
123
|
123
|
|
|
124
|
124
|
An example of this capability has been provided as a proof of concept in
|
|
125
|
125
|
:file:`docs/examples/widgets` that lets you directly communicate with one or more
|
|
126
|
126
|
parallel engines, acting as a mini-console for parallel debugging and
|
|
127
|
127
|
introspection.
|
|
128
|
128
|
|
|
129
|
129
|
|
|
130
|
130
|
Improved tooltips
|
|
131
|
131
|
~~~~~~~~~~~~~~~~~
|
|
132
|
132
|
|
|
133
|
133
|
The object tooltips have gained some new functionality. By pressing tab several
|
|
134
|
134
|
times, you can expand them to see more of a docstring, keep them visible as you
|
|
135
|
135
|
fill in a function's parameters, or transfer the information to the pager at the
|
|
136
|
136
|
bottom of the screen. For the details, look at the example notebook
|
|
137
|
137
|
:file:`01_notebook_introduction.ipynb`.
|
|
138
|
138
|
|
|
139
|
139
|
.. figure:: ../_static/ipy_013_notebook_tooltip.png
|
|
140
|
140
|
:width: 460px
|
|
141
|
141
|
:alt: Improved tooltips in the notebook.
|
|
142
|
142
|
:align: center
|
|
143
|
143
|
:target: ../_static/ipy_013_notebook_tooltip.png
|
|
144
|
144
|
|
|
145
|
145
|
The new notebook tooltips.
|
|
146
|
146
|
|
|
147
|
147
|
Other improvements to the Notebook
|
|
148
|
148
|
----------------------------------
|
|
149
|
149
|
|
|
150
|
150
|
* The notebook pager (the area at the bottom) is now resizeable by dragging its
|
|
151
|
151
|
divider handle, a feature that had been requested many times by just about
|
|
152
|
152
|
anyone who had used the notebook system. :ghpull:`1705`.
|
|
153
|
153
|
|
|
154
|
154
|
* If a notebook directory is specified with ``--notebook-dir`` (or with the
|
|
155
|
155
|
corresponding configuration flag ``NotebookManager.notebook_dir``), all
|
|
156
|
156
|
kernels start in this directory.
|
|
157
|
157
|
|
|
158
|
158
|
* It is now possible to open notebooks directly from the command line; for
|
|
159
|
159
|
example: ``ipython notebook path/`` will automatically set ``path/`` as the
|
|
160
|
160
|
notebook directory, and ``ipython notebook path/foo.ipynb`` will further
|
|
161
|
161
|
start with the ``foo.ipynb`` notebook opened. :ghpull:`1686`.
|
|
162
|
162
|
|
|
163
|
163
|
* Fix codemirror clearing of cells with ``Ctrl-Z``; :ghpull:`1965`.
|
|
164
|
164
|
|
|
165
|
165
|
* Text (markdown) cells now line wrap correctly in the notebook, making them
|
|
166
|
166
|
much easier to edit :ghpull:`1330`.
|
|
167
|
167
|
|
|
168
|
168
|
* PNG and JPEG figures returned from plots can be interactively resized in the
|
|
169
|
169
|
notebook, by dragging them from their lower left corner. :ghpull:`1832`.
|
|
170
|
170
|
|
|
171
|
171
|
* Clear In[] prompt numbers on "Clear All Output". For more
|
|
172
|
172
|
version-control-friendly `.ipynb` files, this strips the `In[]` prompt
|
|
173
|
173
|
numbers when doing a "Clear all output". This reduces the amount of noise in
|
|
174
|
174
|
commit-to-commit diffs that would otherwise show the (highly variable) prompt
|
|
175
|
175
|
number changes. :ghpull:`1621`.
|
|
176
|
176
|
|
|
177
|
177
|
* The notebook server now requires *two* consecutive ``Ctrl-C`` to stop within 5
|
|
178
|
178
|
seconds (or an interactive confirmation). This makes it less likely that you
|
|
179
|
179
|
will accidentally kill a long-running server by typing ``Ctrl-C`` in the
|
|
180
|
180
|
wrong terminal. :ghpull:`1609`.
|
|
181
|
181
|
|
|
182
|
182
|
* Using ``Ctrl-S`` (or ``Cmd-S`` on a Mac) actually saves the notebook rather
|
|
183
|
183
|
than providing the fairly useless browser html save dialog. :ghpull:`1334`.
|
|
184
|
184
|
|
|
185
|
185
|
* Allow accessing local files from the notebook (in urls), by serving any local
|
|
186
|
186
|
file as the url ``files/<relativepath>``. This makes it possible to, for
|
|
187
|
187
|
example, embed local images in a notebook. :ghpull:`1211`.
|
|
188
|
188
|
|
|
189
|
189
|
|
|
190
|
190
|
Cell magics
|
|
191
|
191
|
-----------
|
|
192
|
192
|
|
|
193
|
193
|
We have completely refactored the magic system, finally moving the magic
|
|
194
|
194
|
objects to standalone, independent objects instead of being the mixin class
|
|
195
|
195
|
we'd had since the beginning of IPython (:ghpull:`1732`). Now, a separate base
|
|
196
|
196
|
class is provided in :class:`IPython.core.magic.Magics` that users can subclass
|
|
197
|
197
|
to create their own magics. Decorators are also provided to create magics from
|
|
198
|
198
|
simple functions without the need for object orientation.
|
|
199
|
199
|
|
|
200
|
200
|
All builtin magics now exist in a few subclasses that group together related
|
|
201
|
201
|
functionality, and the new :mod:`IPython.core.magics` package has been created
|
|
202
|
202
|
to organize this into smaller files.
|
|
203
|
203
|
|
|
204
|
204
|
This cleanup was the last major piece of deep refactoring needed from the
|
|
205
|
205
|
original 2001 codebase.
|
|
206
|
206
|
|
|
207
|
207
|
We have also introduced a new type of magic function, prefixed with `%%`
|
|
208
|
|
instead of `%`, which operates at the cell level. A cell magic receives two
|
|
209
|
|
arguments: the line it is called on (like a line magic) and the body of the
|
|
|
208
|
instead of `%`, which operates at the whole-cell level. A cell magic receives
|
|
|
209
|
two arguments: the line it is called on (like a line magic) and the body of the
|
|
210
|
210
|
cell below it.
|
|
211
|
211
|
|
|
212
|
212
|
Cell magics are most natural in the notebook, but they also work in the
|
|
213
|
213
|
terminal and qt console, with the usual approach of using a blank line to
|
|
214
|
214
|
signal cell termination.
|
|
215
|
215
|
|
|
216
|
216
|
For example, to time the execution of several statements::
|
|
217
|
217
|
|
|
218
|
218
|
%%timeit x = 0 # setup
|
|
219
|
219
|
for i in range(100000):
|
|
220
|
220
|
x += i**2
|
|
221
|
221
|
|
|
222
|
222
|
This is particularly useful to integrate code in another language, and cell
|
|
223
|
223
|
magics already exist for shell scripts, Cython, R and Octave. Using ``%%script
|
|
224
|
224
|
/usr/bin/foo``, you can run a cell in any interpreter that accepts code via
|
|
225
|
225
|
stdin.
|
|
226
|
226
|
|
|
227
|
227
|
Another handy cell magic makes it easy to write short text files: ``%%file
|
|
228
|
228
|
~/save/to/here.txt``.
|
|
229
|
229
|
|
|
230
|
230
|
The following cell magics are now included by default; all those that use
|
|
231
|
231
|
special interpreters (Perl, Ruby, bash, etc., assume you have the requisite
|
|
232
|
232
|
interpreter installed):
|
|
233
|
233
|
|
|
234
|
234
|
* ``%%!``: run cell body with the underlying OS shell; this is similar to
|
|
235
|
235
|
prefixing every line in the cell with ``!``.
|
|
236
|
236
|
|
|
237
|
237
|
* ``%%bash``: run cell body under bash.
|
|
238
|
238
|
|
|
239
|
239
|
* ``%%capture``: capture the output of the code in the cell (and stderr as
|
|
240
|
240
|
well). Useful to run codes that produce too much output that you don't even
|
|
241
|
241
|
want scrolled.
|
|
242
|
242
|
|
|
243
|
243
|
* ``%%file``: save cell body as a file.
|
|
244
|
244
|
|
|
245
|
245
|
* ``%%perl``: run cell body using Perl.
|
|
246
|
246
|
|
|
247
|
247
|
* ``%%prun``: run cell body with profiler (cell extension of ``%prun``).
|
|
248
|
248
|
|
|
249
|
249
|
* ``%%python3``: run cell body using Python 3.
|
|
250
|
250
|
|
|
251
|
251
|
* ``%%ruby``: run cell body using Ruby.
|
|
252
|
252
|
|
|
253
|
253
|
* ``%%script``: run cell body with the script specified in the first line.
|
|
254
|
254
|
|
|
255
|
255
|
* ``%%sh``: run cell body using sh.
|
|
256
|
256
|
|
|
257
|
257
|
* ``%%sx``: capture cell output running the code with the system shell (cell
|
|
258
|
258
|
extension of ``%sx``).
|
|
259
|
259
|
|
|
260
|
260
|
* ``%%system``: run cell with system shell (``%%!`` is an alias to this).
|
|
261
|
261
|
|
|
262
|
262
|
* ``%%timeit``: time the execution of the cell (extension of ``%timeit``).
|
|
263
|
263
|
|
|
264
|
264
|
This is what some of the script-related magics look like in action:
|
|
265
|
265
|
|
|
266
|
266
|
.. image:: ../_static/ipy_013_notebook_script_cells.png
|
|
267
|
267
|
:width: 460px
|
|
268
|
268
|
:alt: Cluster management from the notebook dashboard
|
|
269
|
269
|
:align: center
|
|
270
|
270
|
:target: ../_static/ipy_013_notebook_script_cells.png
|
|
271
|
271
|
|
|
272
|
272
|
In addition, we have also a number of :ref:`extensions <extensions_overview>`
|
|
273
|
273
|
that provide specialized magics. These typically require additional software
|
|
274
|
274
|
to run and must be manually loaded via ``%load_ext <extension name>``, but are
|
|
275
|
|
extremely useful. In particular, we want to highlight a few:
|
|
|
275
|
extremely useful. The following extensions are provided:
|
|
276
|
276
|
|
|
|
277
|
Cython magics (extension :ref:`octavemagic <extensions_cythonmagic>`)
|
|
|
278
|
This extension provides magics to automatically build and compile Python
|
|
|
279
|
extension modules using the Cython_ language. You must install Cython
|
|
|
280
|
separately, as well as a C compiler, for this to work. The examples
|
|
|
281
|
directory in the source distribution ships with a full notebook
|
|
|
282
|
demonstrating these capabilities:
|
|
277
|
283
|
|
|
|
284
|
.. image:: ../_static/ipy_013_notebook_cythonmagic.png
|
|
|
285
|
:width: 460px
|
|
|
286
|
:alt: Cython magic
|
|
|
287
|
:align: center
|
|
|
288
|
:target: ../_static/ipy_013_notebook_cythonmagic.png
|
|
|
289
|
|
|
|
290
|
.. _cython: http://cython.org
|
|
|
291
|
|
|
|
292
|
Octave magics (extension :ref:`octavemagic <extensions_octavemagic>`)
|
|
|
293
|
This extension provides several magics that support calling code written in
|
|
|
294
|
the Octave_ language for numerical computing. You can execute single-lines
|
|
|
295
|
or whole blocks of Octave code, capture both output and figures inline
|
|
|
296
|
(just like matplotlib plots), and have variables automatically converted
|
|
|
297
|
between the two languages. To use this extension, you must have Octave
|
|
|
298
|
installed as well as the oct2py_ and h5py_ packages. The examples
|
|
|
299
|
directory in the source distribution ships with a full notebook
|
|
|
300
|
demonstrating these capabilities:
|
|
|
301
|
|
|
|
302
|
.. image:: ../_static/ipy_013_notebook_octavemagic.png
|
|
|
303
|
:width: 460px
|
|
|
304
|
:alt: Octave magic
|
|
|
305
|
:align: center
|
|
|
306
|
:target: ../_static/ipy_013_notebook_octavemagic.png
|
|
|
307
|
|
|
|
308
|
.. _octave: http://www.gnu.org/software/octave
|
|
|
309
|
.. _oct2py: http://pypi.python.org/pypi/oct2py
|
|
|
310
|
.. _h5py: http://code.google.com/p/h5py
|
|
|
311
|
|
|
|
312
|
|
|
|
313
|
R magics (extension :ref:`rmagic <extensions_rmagic>`)
|
|
|
314
|
This extension provides several magics that support calling code written in
|
|
|
315
|
the R_ language for statistical data analysis. You can execute
|
|
|
316
|
single-lines or whole blocks of R code, capture both output and figures
|
|
|
317
|
inline (just like matplotlib plots), and have variables automatically
|
|
|
318
|
converted between the two languages. To use this extension, you must have
|
|
|
319
|
R installed as well as the rpy2_ package that bridges Python and R. The
|
|
|
320
|
examples directory in the source distribution ships with a full notebook
|
|
|
321
|
demonstrating these capabilities:
|
|
|
322
|
|
|
|
323
|
.. image:: ../_static/ipy_013_notebook_rmagic.png
|
|
|
324
|
:width: 460px
|
|
|
325
|
:alt: R magic
|
|
|
326
|
:align: center
|
|
|
327
|
:target: ../_static/ipy_013_notebook_rmagic.png
|
|
|
328
|
|
|
|
329
|
.. _R: http://www.r-project.org
|
|
|
330
|
.. _rpy2: http://rpy.sourceforge.net/rpy2.html
|
|
278
|
331
|
|
|
279
|
332
|
|
|
280
|
333
|
Tab completer improvements
|
|
281
|
334
|
--------------------------
|
|
282
|
335
|
|
|
283
|
336
|
Useful tab-completion based on live inspection of objects is one of the most
|
|
284
|
337
|
popular features of IPython. To make this process even more user-friendly, the
|
|
285
|
338
|
completers of both the Qt console and the Notebook have been reworked.
|
|
286
|
339
|
|
|
287
|
340
|
The Qt console comes with a new ncurses-like tab completer, activated by
|
|
288
|
341
|
default, which lets you cycle through the available completions by pressing tab,
|
|
289
|
342
|
or select a completion with the arrow keys (:ghpull:`1851`).
|
|
290
|
343
|
|
|
291
|
344
|
.. figure:: ../_static/ipy_013_qtconsole_completer.png
|
|
292
|
345
|
:width: 460px
|
|
293
|
346
|
:alt: ncurses-like completer, with highlighted selection.
|
|
294
|
347
|
:align: center
|
|
295
|
348
|
:target: ../_static/ipy_013_qtconsole_completer.png
|
|
296
|
349
|
|
|
297
|
350
|
The new improved Qt console's ncurses-like completer allows to easily
|
|
298
|
351
|
navigate thought long list of completions.
|
|
299
|
352
|
|
|
300
|
353
|
In the notebook, completions are now sourced both from object introspection and
|
|
301
|
354
|
analysis of surrounding code, so limited completions can be offered for
|
|
302
|
355
|
variables defined in the current cell, or while the kernel is busy
|
|
303
|
356
|
(:ghpull:`1711`).
|
|
304
|
357
|
|
|
305
|
358
|
|
|
306
|
359
|
We have implemented a new configurable flag to control tab completion on
|
|
307
|
360
|
modules that provide the ``__all__`` attribute::
|
|
308
|
361
|
|
|
309
|
362
|
IPCompleter.limit_to__all__= Boolean
|
|
310
|
363
|
|
|
311
|
364
|
This instructs the completer to honor ``__all__`` for the completion.
|
|
312
|
365
|
Specifically, when completing on ``object.<tab>``, if True: only those names
|
|
313
|
366
|
in ``obj.__all__`` will be included. When False [default]: the ``__all__``
|
|
314
|
367
|
attribute is ignored. :ghpull:`1529`.
|
|
315
|
368
|
|
|
316
|
369
|
|
|
317
|
370
|
Improvements to the Qt console
|
|
318
|
371
|
------------------------------
|
|
319
|
372
|
|
|
320
|
373
|
* changes for easier integration into other projects such as Spyder_.
|
|
321
|
374
|
|
|
322
|
375
|
* Improved menus with a new Magic menu that is organized by magic groups (this
|
|
323
|
376
|
was made possible by the reorganization of the magic system
|
|
324
|
377
|
internals). :ghpull:`1782`.
|
|
325
|
378
|
|
|
326
|
379
|
* Allow for restarting kernels without clearing the qtconsole, while leaving a
|
|
327
|
380
|
visible indication that the kernel has restarted. :ghpull:`1681`.
|
|
328
|
381
|
|
|
329
|
382
|
* Allow the native display of jpeg image in the qtconsole. :ghpull:`1643`.
|
|
330
|
383
|
|
|
331
|
384
|
.. _spyder: https://code.google.com/p/spyderlib
|
|
332
|
385
|
|
|
333
|
386
|
|
|
334
|
387
|
|
|
335
|
388
|
Parallel
|
|
336
|
389
|
--------
|
|
337
|
390
|
|
|
338
|
391
|
The parallel tools have been improved and fine-tuned on multiple fronts. Now,
|
|
339
|
392
|
the creation of an :class:`IPython.parallel.Client` object automatically
|
|
340
|
393
|
activates a line and cell magic function ``px`` that sends its code to all the
|
|
341
|
394
|
engines. Further magics can be easily created with the :meth:`.Client.activate`
|
|
342
|
395
|
method, to conveniently execute code on any subset of engines. :ghpull:`1893`.
|
|
343
|
396
|
|
|
344
|
397
|
The ``%%px`` cell magic can also be given an optional targets argument, as well
|
|
345
|
398
|
as a ``--out`` argument for storing its output.
|
|
346
|
399
|
|
|
347
|
400
|
A new magic has also been added, ``%pxconfig``, that lets you configure various
|
|
348
|
401
|
defaults of the parallel magics. As usual, type ``%pxconfig?`` for details.
|
|
349
|
402
|
|
|
350
|
403
|
The exception reporting in parallel contexts has been improved to be easier to
|
|
351
|
404
|
read. Now, IPython directly reports the remote exceptions without showing any
|
|
352
|
405
|
of the internal execution parts:
|
|
353
|
406
|
|
|
354
|
407
|
.. image:: ../_static/ipy_013_par_tb.png
|
|
355
|
408
|
:width: 460px
|
|
356
|
409
|
:alt: Improved parallel exceptions.
|
|
357
|
410
|
:align: center
|
|
358
|
411
|
:target: ../_static/ipy_013_par_tb.png
|
|
359
|
412
|
|
|
360
|
413
|
|
|
361
|
414
|
The parallel tools now default to using ``NoDB`` as the storage backend for
|
|
362
|
415
|
intermediate results. This means that the default usage case will have a
|
|
363
|
416
|
significantly reduced memory footprint, though certain advanced features are
|
|
364
|
417
|
not available with this backend. For more details, see :ref:`parallel_db`.
|
|
365
|
418
|
|
|
366
|
419
|
The parallel magics now display all output, so you can do parallel plotting or
|
|
367
|
420
|
other actions with complex display. The ``px`` magic has now both line and cell
|
|
368
|
421
|
modes, and in cell mode finer control has been added about how to collate
|
|
369
|
422
|
output from multiple engines. :ghpull:`1768`.
|
|
370
|
423
|
|
|
371
|
424
|
Incremental improvements to SSH launchers:
|
|
372
|
425
|
|
|
373
|
426
|
* add to_send/fetch steps for moving connection files around.
|
|
374
|
427
|
|
|
375
|
428
|
* add SSHProxyEngineSetLauncher, for invoking to `ipcluster engines` on a
|
|
376
|
429
|
remote host. This can be used to start a set of engines via PBS/SGE/MPI
|
|
377
|
430
|
*remotely*.
|
|
378
|
431
|
|
|
379
|
432
|
This makes the SSHLauncher usable on machines without shared filesystems.
|
|
380
|
433
|
|
|
381
|
434
|
When sending files, the destination directory must *already exist* - that is,
|
|
382
|
435
|
`ipython profile create` may be necessary on the remote system, before the
|
|
383
|
436
|
security dir exists for putting the connection file the first
|
|
384
|
437
|
time. :ghpull:`1634`.
|
|
385
|
438
|
|
|
386
|
439
|
Add sugar methods/properties to AsyncResult that are generically useful
|
|
387
|
440
|
(:ghpull:`1548`):
|
|
388
|
441
|
|
|
389
|
442
|
* ``ar.wall_time`` = received - submitted
|
|
390
|
443
|
* ``ar.serial_time`` = sum of serial computation time
|
|
391
|
444
|
* ``ar.elapsed`` = time since submission (wall_time if done)
|
|
392
|
445
|
* ``ar.progress`` = (int) number of sub-tasks that have completed
|
|
393
|
446
|
* ``len(ar)`` = # of tasks
|
|
394
|
447
|
* ``ar.wait_interactive()``: prints progress
|
|
395
|
448
|
|
|
396
|
449
|
Added :meth:`.Client.spin_thread` / :meth:`~.Client.stop_spin_thread` for running
|
|
397
|
450
|
spin in a background thread, to keep zmq queue clear. This can be used to
|
|
398
|
451
|
ensure that timing information is as accurate as possible (at the cost of
|
|
399
|
452
|
having a background thread active).
|
|
400
|
453
|
|
|
401
|
454
|
Set TaskScheduler.hwm default to 1 instead of 0. 1 has more
|
|
402
|
455
|
predictable/intuitive behavior, if often slower, and thus a more logical
|
|
403
|
456
|
default. Users whose workloads require maximum throughput and are largely
|
|
404
|
457
|
homogeneous in time per task can make the optimization themselves, but now the
|
|
405
|
458
|
behavior will be less surprising to new users. :ghpull:`1294`.
|
|
406
|
459
|
|
|
407
|
460
|
|
|
408
|
461
|
Kernel/Engine unification
|
|
409
|
462
|
-------------------------
|
|
410
|
463
|
|
|
411
|
464
|
:ghpull:`1640`
|
|
412
|
465
|
|
|
413
|
466
|
Add :func:`IPython.embed_kernel()` as a public API.
|
|
414
|
467
|
Embedding an IPython kernel in an application is useful when you want to use
|
|
415
|
468
|
IPython.embed() but don't have a terminal attached on stdin and stdout.
|
|
416
|
469
|
|
|
417
|
470
|
:func:`IPython.parallel.bind_kernel` allows you to promote Engines to listening Kernels,
|
|
418
|
471
|
and connect QtConsoles directly to an Engine and debug it directly.
|
|
419
|
472
|
|
|
420
|
473
|
This also means that Engines are now fully IPython, allowing access to magics,
|
|
421
|
474
|
etc. in your parallel execution.
|
|
422
|
475
|
|
|
423
|
476
|
|
|
424
|
477
|
Official Public API
|
|
425
|
478
|
-------------------
|
|
426
|
479
|
|
|
427
|
480
|
We have begun organizing our API for easier public use, with an eye towards an
|
|
428
|
481
|
official IPython 1.0 release which will firmly maintain this API compatible for
|
|
429
|
482
|
its entire lifecycle. There is now an :mod:`IPython.display` module that
|
|
430
|
483
|
aggregates all display routines, and the :mod:`IPython.config` namespace has
|
|
431
|
484
|
all public configuration tools. We will continue improving our public API
|
|
432
|
485
|
layout so that users only need to import names one level deeper than the main
|
|
433
|
486
|
``IPython`` package to access all public namespaces.
|
|
434
|
487
|
|
|
435
|
488
|
|
|
436
|
489
|
IPython notebook file icons
|
|
437
|
490
|
---------------------------
|
|
438
|
491
|
|
|
439
|
492
|
The directory ``docs/resources`` in the source distribution contains SVG and
|
|
440
|
493
|
PNG versions of our file icons, as well as an ``Info.plist.example`` file with
|
|
441
|
494
|
instructions to install them on Mac OSX. This is a first draft of our icons,
|
|
442
|
495
|
and we encourage contributions from users with graphic talent to improve them
|
|
443
|
496
|
in the future:
|
|
444
|
497
|
|
|
445
|
498
|
.. image:: ../../resources/ipynb_icon_128x128.png
|
|
446
|
499
|
:alt: IPython notebook file icon.
|
|
447
|
500
|
|
|
448
|
501
|
|
|
449
|
502
|
New top-level `locate` command
|
|
450
|
503
|
------------------------------
|
|
451
|
504
|
|
|
452
|
505
|
Add `locate` entry points; these would be useful for quickly locating IPython
|
|
453
|
506
|
directories and profiles from other (non-Python) applications. :ghpull:`1762`.
|
|
454
|
507
|
|
|
455
|
508
|
Examples::
|
|
456
|
509
|
|
|
457
|
510
|
$> ipython locate
|
|
458
|
511
|
/Users/me/.ipython
|
|
459
|
512
|
|
|
460
|
513
|
$> ipython locate profile foo
|
|
461
|
514
|
/Users/me/.ipython/profile_foo
|
|
462
|
515
|
|
|
463
|
516
|
$> ipython locate profile
|
|
464
|
517
|
/Users/me/.ipython/profile_default
|
|
465
|
518
|
|
|
466
|
519
|
$> ipython locate profile dne
|
|
467
|
520
|
[ProfileLocate] Profile u'dne' not found.
|
|
468
|
521
|
|
|
469
|
522
|
|
|
470
|
523
|
Other new features and improvements
|
|
471
|
524
|
-----------------------------------
|
|
472
|
525
|
|
|
473
|
526
|
* **%install_ext**: A new magic function to install an IPython extension from
|
|
474
|
527
|
a URL. E.g. ``%install_ext
|
|
475
|
528
|
https://bitbucket.org/birkenfeld/ipython-physics/raw/default/physics.py``.
|
|
476
|
529
|
|
|
477
|
530
|
* The ``%loadpy`` magic is no longer restricted to Python files, and has been
|
|
478
|
531
|
renamed ``%load``. The old name remains as an alias.
|
|
479
|
532
|
|
|
480
|
533
|
* New command line arguments will help external programs find IPython folders:
|
|
481
|
534
|
``ipython locate`` finds the user's IPython directory, and ``ipython locate
|
|
482
|
535
|
profile foo`` finds the folder for the 'foo' profile (if it exists).
|
|
483
|
536
|
|
|
484
|
537
|
* The :envvar:`IPYTHON_DIR` environment variable, introduced in the Great
|
|
485
|
538
|
Reorganization of 0.11 and existing only in versions 0.11-0.13, has been
|
|
486
|
539
|
deprecated. As described in :ghpull:`1167`, the complexity and confusion of
|
|
487
|
540
|
migrating to this variable is not worth the aesthetic improvement. Please use
|
|
488
|
541
|
the historical :envvar:`IPYTHONDIR` environment variable instead.
|
|
489
|
542
|
|
|
490
|
543
|
* The default value of *interactivity* passed from
|
|
491
|
544
|
:meth:`~IPython.core.interactiveshell.InteractiveShell.run_cell` to
|
|
492
|
545
|
:meth:`~IPython.core.interactiveshell.InteractiveShell.run_ast_nodes`
|
|
493
|
546
|
is now configurable.
|
|
494
|
547
|
|
|
495
|
548
|
* New ``%alias_magic`` function to conveniently create aliases of existing
|
|
496
|
549
|
magics, if you prefer to have shorter names for personal use.
|
|
497
|
550
|
|
|
498
|
551
|
* We ship unminified versions of the JavaScript libraries we use, to better
|
|
499
|
552
|
comply with Debian's packaging policies.
|
|
500
|
553
|
|
|
501
|
554
|
* Simplify the information presented by ``obj?/obj??`` to eliminate a few
|
|
502
|
555
|
redundant fields when possible. :ghpull:`2038`.
|
|
503
|
556
|
|
|
504
|
557
|
* Improved continuous integration for IPython. We now have automated test runs
|
|
505
|
558
|
on `Shining Panda <https://jenkins.shiningpanda.com/ipython>`_ and `Travis-CI
|
|
506
|
559
|
<http://travis-ci.org/#!/ipython/ipython>`_, as well as `Tox support
|
|
507
|
560
|
<http://tox.testrun.org>`_.
|
|
508
|
561
|
|
|
509
|
562
|
* The `vim-ipython`_ functionality (externally developed) has been updated to
|
|
510
|
563
|
the latest version.
|
|
511
|
564
|
|
|
512
|
565
|
.. _vim-ipython: https://github.com/ivanov/vim-ipython
|
|
513
|
566
|
|
|
514
|
567
|
* The ``%save`` magic now has a ``-f`` flag to force overwriting, which makes
|
|
515
|
568
|
it much more usable in the notebook where it is not possible to reply to
|
|
516
|
569
|
interactive questions from the kernel. :ghpull:`1937`.
|
|
517
|
570
|
|
|
518
|
571
|
* Use dvipng to format sympy.Matrix, enabling display of matrices in the Qt
|
|
519
|
572
|
console with the sympy printing extension. :ghpull:`1861`.
|
|
520
|
573
|
|
|
521
|
574
|
* Our messaging protocol now has a reasonable test suite, helping ensure that
|
|
522
|
575
|
we don't accidentally deviate from the spec and possibly break third-party
|
|
523
|
576
|
applications that may have been using it. We encourage users to contribute
|
|
524
|
577
|
more stringent tests to this part of the test suite. :ghpull:`1627`.
|
|
525
|
578
|
|
|
526
|
579
|
* Use LaTeX to display, on output, various built-in types with the SymPy
|
|
527
|
580
|
printing extension. :ghpull:`1399`.
|
|
528
|
581
|
|
|
529
|
582
|
* Add Gtk3 event loop integration and example. :ghpull:`1588`.
|
|
530
|
583
|
|
|
531
|
584
|
* ``clear_output`` improvements, which allow things like progress bars and other
|
|
532
|
585
|
simple animations to work well in the notebook (:ghpull:`1563`):
|
|
533
|
586
|
|
|
534
|
587
|
* `clear_output()` clears the line, even in terminal IPython, the QtConsole
|
|
535
|
588
|
and plain Python as well, by printing `\r` to streams.
|
|
536
|
589
|
|
|
537
|
590
|
* `clear_output()` avoids the flicker in the notebook by adding a delay,
|
|
538
|
591
|
and firing immediately upon the next actual display message.
|
|
539
|
592
|
|
|
540
|
593
|
* `display_javascript` hides its `output_area` element, so using display to
|
|
541
|
594
|
run a bunch of javascript doesn't result in ever-growing vertical space.
|
|
542
|
595
|
|
|
543
|
596
|
* Add simple support for running inside a virtualenv. While this doesn't
|
|
544
|
597
|
supplant proper installation (as users should do), it helps ad-hoc calling of
|
|
545
|
598
|
IPython from inside a virtualenv. :ghpull:`1388`.
|
|
546
|
599
|
|
|
547
|
600
|
|
|
548
|
601
|
Major Bugs fixed
|
|
549
|
602
|
----------------
|
|
550
|
603
|
|
|
551
|
604
|
In this cycle, we have :ref:`closed over 740 issues <issues_list_013>`, but a
|
|
552
|
605
|
few major ones merit special mention:
|
|
553
|
606
|
|
|
554
|
607
|
* The ``%pastebin`` magic has been updated to point to gist.github.com, since
|
|
555
|
608
|
unfortunately http://paste.pocoo.org has closed down. We also added a -d flag
|
|
556
|
609
|
for the user to provide a gist description string. :ghpull:`1670`.
|
|
557
|
610
|
|
|
558
|
611
|
* Fix ``%paste`` that would reject certain valid inputs. :ghpull:`1258`.
|
|
559
|
612
|
|
|
560
|
613
|
* Fix sending and receiving of Numpy structured arrays (those with composite
|
|
561
|
614
|
dtypes, often used as recarrays). :ghpull:`2034`.
|
|
562
|
615
|
|
|
563
|
616
|
* Reconnect when the websocket connection closes unexpectedly. :ghpull:`1577`.
|
|
564
|
617
|
|
|
565
|
618
|
* Fix truncated representation of objects in the debugger by showing at least
|
|
566
|
619
|
80 characters' worth of information. :ghpull:`1793`.
|
|
567
|
620
|
|
|
568
|
621
|
* Fix logger to be Unicode-aware: logging could crash ipython if there was
|
|
569
|
622
|
unicode in the input. :ghpull:`1792`.
|
|
570
|
623
|
|
|
571
|
624
|
* Fix images missing from XML/SVG export in the Qt console. :ghpull:`1449`.
|
|
572
|
625
|
|
|
573
|
626
|
* Fix deepreload on Python 3. :ghpull:`1625`, as well as having a much cleaner
|
|
574
|
627
|
and more robust implementation of deepreload in general. :ghpull:`1457`.
|
|
575
|
628
|
|
|
576
|
629
|
|
|
577
|
630
|
Backwards incompatible changes
|
|
578
|
631
|
------------------------------
|
|
579
|
632
|
|
|
580
|
633
|
* The exception :exc:`IPython.core.error.TryNext` previously accepted
|
|
581
|
634
|
arguments and keyword arguments to be passed to the next implementation
|
|
582
|
635
|
of the hook. This feature was removed as it made error message propagation
|
|
583
|
636
|
difficult and violated the principle of loose coupling.
|