##// END OF EJS Templates
change %cpaste rep to %cpaste -r
Ville M. Vainio -
Show More

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

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