##// END OF EJS Templates
whatsnew/version0.9.txt: Fix 'mulitple' -> 'multiple' typo
W. Trevor King -
Show More
@@ -1,283 +1,283 b''
1 1 ========================================
2 2 0.9 series
3 3 ========================================
4 4
5 5 Release 0.9.1
6 6 =============
7 7
8 8 This release was quickly made to restore compatibility with Python 2.4, which
9 9 version 0.9 accidentally broke. No new features were introduced, other than
10 10 some additional testing support for internal use.
11 11
12 12
13 13 Release 0.9
14 14 ===========
15 15
16 16 New features
17 17 ------------
18 18
19 19 * All furl files and security certificates are now put in a read-only
20 20 directory named ~/.ipython/security.
21 21
22 22 * A single function :func:`get_ipython_dir`, in :mod:`IPython.genutils` that
23 23 determines the user's IPython directory in a robust manner.
24 24
25 25 * Laurent's WX application has been given a top-level script called
26 26 ipython-wx, and it has received numerous fixes. We expect this code to be
27 27 architecturally better integrated with Gael's WX 'ipython widget' over the
28 28 next few releases.
29 29
30 30 * The Editor synchronization work by Vivian De Smedt has been merged in. This
31 31 code adds a number of new editor hooks to synchronize with editors under
32 32 Windows.
33 33
34 34 * A new, still experimental but highly functional, WX shell by Gael Varoquaux.
35 35 This work was sponsored by Enthought, and while it's still very new, it is
36 36 based on a more cleanly organized arhictecture of the various IPython
37 37 components. We will continue to develop this over the next few releases as a
38 38 model for GUI components that use IPython.
39 39
40 40 * Another GUI frontend, Cocoa based (Cocoa is the OSX native GUI framework),
41 41 authored by Barry Wark. Currently the WX and the Cocoa ones have slightly
42 42 different internal organizations, but the whole team is working on finding
43 43 what the right abstraction points are for a unified codebase.
44 44
45 45 * As part of the frontend work, Barry Wark also implemented an experimental
46 46 event notification system that various ipython components can use. In the
47 47 next release the implications and use patterns of this system regarding the
48 48 various GUI options will be worked out.
49 49
50 50 * IPython finally has a full test system, that can test docstrings with
51 51 IPython-specific functionality. There are still a few pieces missing for it
52 52 to be widely accessible to all users (so they can run the test suite at any
53 53 time and report problems), but it now works for the developers. We are
54 54 working hard on continuing to improve it, as this was probably IPython's
55 55 major Achilles heel (the lack of proper test coverage made it effectively
56 56 impossible to do large-scale refactoring). The full test suite can now
57 57 be run using the :command:`iptest` command line program.
58 58
59 59 * The notion of a task has been completely reworked. An `ITask` interface has
60 60 been created. This interface defines the methods that tasks need to
61 61 implement. These methods are now responsible for things like submitting
62 62 tasks and processing results. There are two basic task types:
63 63 :class:`IPython.kernel.task.StringTask` (this is the old `Task` object, but
64 64 renamed) and the new :class:`IPython.kernel.task.MapTask`, which is based on
65 65 a function.
66 66
67 67 * A new interface, :class:`IPython.kernel.mapper.IMapper` has been defined to
68 68 standardize the idea of a `map` method. This interface has a single `map`
69 69 method that has the same syntax as the built-in `map`. We have also defined
70 70 a `mapper` factory interface that creates objects that implement
71 71 :class:`IPython.kernel.mapper.IMapper` for different controllers. Both the
72 72 multiengine and task controller now have mapping capabilties.
73 73
74 74 * The parallel function capabilities have been reworks. The major changes are
75 75 that i) there is now an `@parallel` magic that creates parallel functions,
76 ii) the syntax for mulitple variable follows that of `map`, iii) both the
76 ii) the syntax for multiple variable follows that of `map`, iii) both the
77 77 multiengine and task controller now have a parallel function implementation.
78 78
79 79 * All of the parallel computing capabilities from `ipython1-dev` have been
80 80 merged into IPython proper. This resulted in the following new subpackages:
81 81 :mod:`IPython.kernel`, :mod:`IPython.kernel.core`, :mod:`IPython.config`,
82 82 :mod:`IPython.tools` and :mod:`IPython.testing`.
83 83
84 84 * As part of merging in the `ipython1-dev` stuff, the `setup.py` script and
85 85 friends have been completely refactored. Now we are checking for
86 86 dependencies using the approach that matplotlib uses.
87 87
88 88 * The documentation has been completely reorganized to accept the
89 89 documentation from `ipython1-dev`.
90 90
91 91 * We have switched to using Foolscap for all of our network protocols in
92 92 :mod:`IPython.kernel`. This gives us secure connections that are both
93 93 encrypted and authenticated.
94 94
95 95 * We have a brand new `COPYING.txt` files that describes the IPython license
96 96 and copyright. The biggest change is that we are putting "The IPython
97 97 Development Team" as the copyright holder. We give more details about
98 98 exactly what this means in this file. All developer should read this and use
99 99 the new banner in all IPython source code files.
100 100
101 101 * sh profile: ./foo runs foo as system command, no need to do !./foo anymore
102 102
103 103 * String lists now support ``sort(field, nums = True)`` method (to easily sort
104 104 system command output). Try it with ``a = !ls -l ; a.sort(1, nums=1)``.
105 105
106 106 * '%cpaste foo' now assigns the pasted block as string list, instead of string
107 107
108 108 * The ipcluster script now run by default with no security. This is done
109 109 because the main usage of the script is for starting things on localhost.
110 110 Eventually when ipcluster is able to start things on other hosts, we will put
111 111 security back.
112 112
113 113 * 'cd --foo' searches directory history for string foo, and jumps to that dir.
114 114 Last part of dir name is checked first. If no matches for that are found,
115 115 look at the whole path.
116 116
117 117
118 118 Bug fixes
119 119 ---------
120 120
121 121 * The Windows installer has been fixed. Now all IPython scripts have ``.bat``
122 122 versions created. Also, the Start Menu shortcuts have been updated.
123 123
124 124 * The colors escapes in the multiengine client are now turned off on win32 as
125 125 they don't print correctly.
126 126
127 127 * The :mod:`IPython.kernel.scripts.ipengine` script was exec'ing
128 128 mpi_import_statement incorrectly, which was leading the engine to crash when
129 129 mpi was enabled.
130 130
131 131 * A few subpackages had missing ``__init__.py`` files.
132 132
133 133 * The documentation is only created if Sphinx is found. Previously, the
134 134 ``setup.py`` script would fail if it was missing.
135 135
136 136 * Greedy ``cd`` completion has been disabled again (it was enabled in 0.8.4) as
137 137 it caused problems on certain platforms.
138 138
139 139
140 140 Backwards incompatible changes
141 141 ------------------------------
142 142
143 143 * The ``clusterfile`` options of the :command:`ipcluster` command has been
144 144 removed as it was not working and it will be replaced soon by something much
145 145 more robust.
146 146
147 147 * The :mod:`IPython.kernel` configuration now properly find the user's
148 148 IPython directory.
149 149
150 150 * In ipapi, the :func:`make_user_ns` function has been replaced with
151 151 :func:`make_user_namespaces`, to support dict subclasses in namespace
152 152 creation.
153 153
154 154 * :class:`IPython.kernel.client.Task` has been renamed
155 155 :class:`IPython.kernel.client.StringTask` to make way for new task types.
156 156
157 157 * The keyword argument `style` has been renamed `dist` in `scatter`, `gather`
158 158 and `map`.
159 159
160 160 * Renamed the values that the rename `dist` keyword argument can have from
161 161 `'basic'` to `'b'`.
162 162
163 163 * IPython has a larger set of dependencies if you want all of its capabilities.
164 164 See the `setup.py` script for details.
165 165
166 166 * The constructors for :class:`IPython.kernel.client.MultiEngineClient` and
167 167 :class:`IPython.kernel.client.TaskClient` no longer take the (ip,port) tuple.
168 168 Instead they take the filename of a file that contains the FURL for that
169 169 client. If the FURL file is in your IPYTHONDIR, it will be found automatically
170 170 and the constructor can be left empty.
171 171
172 172 * The asynchronous clients in :mod:`IPython.kernel.asyncclient` are now created
173 173 using the factory functions :func:`get_multiengine_client` and
174 174 :func:`get_task_client`. These return a `Deferred` to the actual client.
175 175
176 176 * The command line options to `ipcontroller` and `ipengine` have changed to
177 177 reflect the new Foolscap network protocol and the FURL files. Please see the
178 178 help for these scripts for details.
179 179
180 180 * The configuration files for the kernel have changed because of the Foolscap
181 181 stuff. If you were using custom config files before, you should delete them
182 182 and regenerate new ones.
183 183
184 184 Changes merged in from IPython1
185 185 -------------------------------
186 186
187 187 New features
188 188 ............
189 189
190 190 * Much improved ``setup.py`` and ``setupegg.py`` scripts. Because Twisted and
191 191 zope.interface are now easy installable, we can declare them as dependencies
192 192 in our setupegg.py script.
193 193
194 194 * IPython is now compatible with Twisted 2.5.0 and 8.x.
195 195
196 196 * Added a new example of how to use :mod:`ipython1.kernel.asynclient`.
197 197
198 198 * Initial draft of a process daemon in :mod:`ipython1.daemon`. This has not
199 199 been merged into IPython and is still in `ipython1-dev`.
200 200
201 201 * The ``TaskController`` now has methods for getting the queue status.
202 202
203 203 * The ``TaskResult`` objects not have information about how long the task
204 204 took to run.
205 205
206 206 * We are attaching additional attributes to exceptions ``(_ipython_*)`` that
207 207 we use to carry additional info around.
208 208
209 209 * New top-level module :mod:`asyncclient` that has asynchronous versions (that
210 210 return deferreds) of the client classes. This is designed to users who want
211 211 to run their own Twisted reactor.
212 212
213 213 * All the clients in :mod:`client` are now based on Twisted. This is done by
214 214 running the Twisted reactor in a separate thread and using the
215 215 :func:`blockingCallFromThread` function that is in recent versions of Twisted.
216 216
217 217 * Functions can now be pushed/pulled to/from engines using
218 218 :meth:`MultiEngineClient.push_function` and
219 219 :meth:`MultiEngineClient.pull_function`.
220 220
221 221 * Gather/scatter are now implemented in the client to reduce the work load
222 222 of the controller and improve performance.
223 223
224 224 * Complete rewrite of the IPython docuementation. All of the documentation
225 225 from the IPython website has been moved into docs/source as restructured
226 226 text documents. PDF and HTML documentation are being generated using
227 227 Sphinx.
228 228
229 229 * New developer oriented documentation: development guidelines and roadmap.
230 230
231 231 * Traditional ``ChangeLog`` has been changed to a more useful ``changes.txt``
232 232 file that is organized by release and is meant to provide something more
233 233 relevant for users.
234 234
235 235 Bug fixes
236 236 .........
237 237
238 238 * Created a proper ``MANIFEST.in`` file to create source distributions.
239 239
240 240 * Fixed a bug in the ``MultiEngine`` interface. Previously, multi-engine
241 241 actions were being collected with a :class:`DeferredList` with
242 242 ``fireononeerrback=1``. This meant that methods were returning
243 243 before all engines had given their results. This was causing extremely odd
244 244 bugs in certain cases. To fix this problem, we have 1) set
245 245 ``fireononeerrback=0`` to make sure all results (or exceptions) are in
246 246 before returning and 2) introduced a :exc:`CompositeError` exception
247 247 that wraps all of the engine exceptions. This is a huge change as it means
248 248 that users will have to catch :exc:`CompositeError` rather than the actual
249 249 exception.
250 250
251 251 Backwards incompatible changes
252 252 ..............................
253 253
254 254 * All names have been renamed to conform to the lowercase_with_underscore
255 255 convention. This will require users to change references to all names like
256 256 ``queueStatus`` to ``queue_status``.
257 257
258 258 * Previously, methods like :meth:`MultiEngineClient.push` and
259 259 :meth:`MultiEngineClient.push` used ``*args`` and ``**kwargs``. This was
260 260 becoming a problem as we weren't able to introduce new keyword arguments into
261 261 the API. Now these methods simple take a dict or sequence. This has also
262 262 allowed us to get rid of the ``*All`` methods like :meth:`pushAll` and
263 263 :meth:`pullAll`. These things are now handled with the ``targets`` keyword
264 264 argument that defaults to ``'all'``.
265 265
266 266 * The :attr:`MultiEngineClient.magicTargets` has been renamed to
267 267 :attr:`MultiEngineClient.targets`.
268 268
269 269 * All methods in the MultiEngine interface now accept the optional keyword
270 270 argument ``block``.
271 271
272 272 * Renamed :class:`RemoteController` to :class:`MultiEngineClient` and
273 273 :class:`TaskController` to :class:`TaskClient`.
274 274
275 275 * Renamed the top-level module from :mod:`api` to :mod:`client`.
276 276
277 277 * Most methods in the multiengine interface now raise a :exc:`CompositeError`
278 278 exception that wraps the user's exceptions, rather than just raising the raw
279 279 user's exception.
280 280
281 281 * Changed the ``setupNS`` and ``resultNames`` in the ``Task`` class to ``push``
282 282 and ``pull``.
283 283
General Comments 0
You need to be logged in to leave comments. Login now