##// END OF EJS Templates
Fix typos
Andrew Kreimer -
Show More
@@ -1,283 +1,283
1 ========================================
1 ========================================
2 0.9 series
2 0.9 series
3 ========================================
3 ========================================
4
4
5 Release 0.9.1
5 Release 0.9.1
6 =============
6 =============
7
7
8 This release was quickly made to restore compatibility with Python 2.4, which
8 This release was quickly made to restore compatibility with Python 2.4, which
9 version 0.9 accidentally broke. No new features were introduced, other than
9 version 0.9 accidentally broke. No new features were introduced, other than
10 some additional testing support for internal use.
10 some additional testing support for internal use.
11
11
12
12
13 Release 0.9
13 Release 0.9
14 ===========
14 ===========
15
15
16 New features
16 New features
17 ------------
17 ------------
18
18
19 * All furl files and security certificates are now put in a read-only
19 * All furl files and security certificates are now put in a read-only
20 directory named ~/.ipython/security.
20 directory named ~/.ipython/security.
21
21
22 * A single function :func:`get_ipython_dir`, in :mod:`IPython.genutils` that
22 * A single function :func:`get_ipython_dir`, in :mod:`IPython.genutils` that
23 determines the user's IPython directory in a robust manner.
23 determines the user's IPython directory in a robust manner.
24
24
25 * Laurent's WX application has been given a top-level script called
25 * Laurent's WX application has been given a top-level script called
26 ipython-wx, and it has received numerous fixes. We expect this code to be
26 ipython-wx, and it has received numerous fixes. We expect this code to be
27 architecturally better integrated with Gael's WX 'ipython widget' over the
27 architecturally better integrated with Gael's WX 'ipython widget' over the
28 next few releases.
28 next few releases.
29
29
30 * The Editor synchronization work by Vivian De Smedt has been merged in. This
30 * The Editor synchronization work by Vivian De Smedt has been merged in. This
31 code adds a number of new editor hooks to synchronize with editors under
31 code adds a number of new editor hooks to synchronize with editors under
32 Windows.
32 Windows.
33
33
34 * A new, still experimental but highly functional, WX shell by Gael Varoquaux.
34 * A new, still experimental but highly functional, WX shell by Gael Varoquaux.
35 This work was sponsored by Enthought, and while it's still very new, it is
35 This work was sponsored by Enthought, and while it's still very new, it is
36 based on a more cleanly organized architecture of the various IPython
36 based on a more cleanly organized architecture of the various IPython
37 components. We will continue to develop this over the next few releases as a
37 components. We will continue to develop this over the next few releases as a
38 model for GUI components that use IPython.
38 model for GUI components that use IPython.
39
39
40 * Another GUI frontend, Cocoa based (Cocoa is the OSX native GUI framework),
40 * Another GUI frontend, Cocoa based (Cocoa is the OSX native GUI framework),
41 authored by Barry Wark. Currently the WX and the Cocoa ones have slightly
41 authored by Barry Wark. Currently the WX and the Cocoa ones have slightly
42 different internal organizations, but the whole team is working on finding
42 different internal organizations, but the whole team is working on finding
43 what the right abstraction points are for a unified codebase.
43 what the right abstraction points are for a unified codebase.
44
44
45 * As part of the frontend work, Barry Wark also implemented an experimental
45 * As part of the frontend work, Barry Wark also implemented an experimental
46 event notification system that various ipython components can use. In the
46 event notification system that various ipython components can use. In the
47 next release the implications and use patterns of this system regarding the
47 next release the implications and use patterns of this system regarding the
48 various GUI options will be worked out.
48 various GUI options will be worked out.
49
49
50 * IPython finally has a full test system, that can test docstrings with
50 * IPython finally has a full test system, that can test docstrings with
51 IPython-specific functionality. There are still a few pieces missing for it
51 IPython-specific functionality. There are still a few pieces missing for it
52 to be widely accessible to all users (so they can run the test suite at any
52 to be widely accessible to all users (so they can run the test suite at any
53 time and report problems), but it now works for the developers. We are
53 time and report problems), but it now works for the developers. We are
54 working hard on continuing to improve it, as this was probably IPython's
54 working hard on continuing to improve it, as this was probably IPython's
55 major Achilles heel (the lack of proper test coverage made it effectively
55 major Achilles heel (the lack of proper test coverage made it effectively
56 impossible to do large-scale refactoring). The full test suite can now
56 impossible to do large-scale refactoring). The full test suite can now
57 be run using the :command:`iptest` command line program.
57 be run using the :command:`iptest` command line program.
58
58
59 * The notion of a task has been completely reworked. An `ITask` interface has
59 * The notion of a task has been completely reworked. An `ITask` interface has
60 been created. This interface defines the methods that tasks need to
60 been created. This interface defines the methods that tasks need to
61 implement. These methods are now responsible for things like submitting
61 implement. These methods are now responsible for things like submitting
62 tasks and processing results. There are two basic task types:
62 tasks and processing results. There are two basic task types:
63 :class:`IPython.kernel.task.StringTask` (this is the old `Task` object, but
63 :class:`IPython.kernel.task.StringTask` (this is the old `Task` object, but
64 renamed) and the new :class:`IPython.kernel.task.MapTask`, which is based on
64 renamed) and the new :class:`IPython.kernel.task.MapTask`, which is based on
65 a function.
65 a function.
66
66
67 * A new interface, :class:`IPython.kernel.mapper.IMapper` has been defined to
67 * A new interface, :class:`IPython.kernel.mapper.IMapper` has been defined to
68 standardize the idea of a `map` method. This interface has a single `map`
68 standardize the idea of a `map` method. This interface has a single `map`
69 method that has the same syntax as the built-in `map`. We have also defined
69 method that has the same syntax as the built-in `map`. We have also defined
70 a `mapper` factory interface that creates objects that implement
70 a `mapper` factory interface that creates objects that implement
71 :class:`IPython.kernel.mapper.IMapper` for different controllers. Both the
71 :class:`IPython.kernel.mapper.IMapper` for different controllers. Both the
72 multiengine and task controller now have mapping capabilities.
72 multiengine and task controller now have mapping capabilities.
73
73
74 * The parallel function capabilities have been reworks. The major changes are
74 * The parallel function capabilities have been reworks. The major changes are
75 that i) there is now an `@parallel` magic that creates parallel functions,
75 that i) there is now an `@parallel` magic that creates parallel functions,
76 ii) the syntax for multiple variable follows that of `map`, iii) both the
76 ii) the syntax for multiple variable follows that of `map`, iii) both the
77 multiengine and task controller now have a parallel function implementation.
77 multiengine and task controller now have a parallel function implementation.
78
78
79 * All of the parallel computing capabilities from `ipython1-dev` have been
79 * All of the parallel computing capabilities from `ipython1-dev` have been
80 merged into IPython proper. This resulted in the following new subpackages:
80 merged into IPython proper. This resulted in the following new subpackages:
81 :mod:`IPython.kernel`, :mod:`IPython.kernel.core`, :mod:`traitlets.config`,
81 :mod:`IPython.kernel`, :mod:`IPython.kernel.core`, :mod:`traitlets.config`,
82 :mod:`IPython.tools` and :mod:`IPython.testing`.
82 :mod:`IPython.tools` and :mod:`IPython.testing`.
83
83
84 * As part of merging in the `ipython1-dev` stuff, the ``setup.py`` script and
84 * As part of merging in the `ipython1-dev` stuff, the ``setup.py`` script and
85 friends have been completely refactored. Now we are checking for
85 friends have been completely refactored. Now we are checking for
86 dependencies using the approach that matplotlib uses.
86 dependencies using the approach that matplotlib uses.
87
87
88 * The documentation has been completely reorganized to accept the
88 * The documentation has been completely reorganized to accept the
89 documentation from `ipython1-dev`.
89 documentation from `ipython1-dev`.
90
90
91 * We have switched to using Foolscap for all of our network protocols in
91 * We have switched to using Foolscap for all of our network protocols in
92 :mod:`IPython.kernel`. This gives us secure connections that are both
92 :mod:`IPython.kernel`. This gives us secure connections that are both
93 encrypted and authenticated.
93 encrypted and authenticated.
94
94
95 * We have a brand new `COPYING.txt` files that describes the IPython license
95 * We have a brand new `COPYING.txt` files that describes the IPython license
96 and copyright. The biggest change is that we are putting "The IPython
96 and copyright. The biggest change is that we are putting "The IPython
97 Development Team" as the copyright holder. We give more details about
97 Development Team" as the copyright holder. We give more details about
98 exactly what this means in this file. All developer should read this and use
98 exactly what this means in this file. All developer should read this and use
99 the new banner in all IPython source code files.
99 the new banner in all IPython source code files.
100
100
101 * sh profile: ./foo runs foo as system command, no need to do !./foo anymore
101 * sh profile: ./foo runs foo as system command, no need to do !./foo anymore
102
102
103 * String lists now support ``sort(field, nums = True)`` method (to easily sort
103 * String lists now support ``sort(field, nums = True)`` method (to easily sort
104 system command output). Try it with ``a = !ls -l ; a.sort(1, nums=1)``.
104 system command output). Try it with ``a = !ls -l ; a.sort(1, nums=1)``.
105
105
106 * '%cpaste foo' now assigns the pasted block as string list, instead of string
106 * '%cpaste foo' now assigns the pasted block as string list, instead of string
107
107
108 * The ipcluster script now run by default with no security. This is done
108 * The ipcluster script now run by default with no security. This is done
109 because the main usage of the script is for starting things on localhost.
109 because the main usage of the script is for starting things on localhost.
110 Eventually when ipcluster is able to start things on other hosts, we will put
110 Eventually when ipcluster is able to start things on other hosts, we will put
111 security back.
111 security back.
112
112
113 * 'cd --foo' searches directory history for string foo, and jumps to that dir.
113 * 'cd --foo' searches directory history for string foo, and jumps to that dir.
114 Last part of dir name is checked first. If no matches for that are found,
114 Last part of dir name is checked first. If no matches for that are found,
115 look at the whole path.
115 look at the whole path.
116
116
117
117
118 Bug fixes
118 Bug fixes
119 ---------
119 ---------
120
120
121 * The Windows installer has been fixed. Now all IPython scripts have ``.bat``
121 * The Windows installer has been fixed. Now all IPython scripts have ``.bat``
122 versions created. Also, the Start Menu shortcuts have been updated.
122 versions created. Also, the Start Menu shortcuts have been updated.
123
123
124 * The colors escapes in the multiengine client are now turned off on win32 as
124 * The colors escapes in the multiengine client are now turned off on win32 as
125 they don't print correctly.
125 they don't print correctly.
126
126
127 * The :mod:`IPython.kernel.scripts.ipengine` script was exec'ing
127 * The :mod:`IPython.kernel.scripts.ipengine` script was exec'ing
128 mpi_import_statement incorrectly, which was leading the engine to crash when
128 mpi_import_statement incorrectly, which was leading the engine to crash when
129 mpi was enabled.
129 mpi was enabled.
130
130
131 * A few subpackages had missing ``__init__.py`` files.
131 * A few subpackages had missing ``__init__.py`` files.
132
132
133 * The documentation is only created if Sphinx is found. Previously, the
133 * The documentation is only created if Sphinx is found. Previously, the
134 ``setup.py`` script would fail if it was missing.
134 ``setup.py`` script would fail if it was missing.
135
135
136 * Greedy ``cd`` completion has been disabled again (it was enabled in 0.8.4) as
136 * Greedy ``cd`` completion has been disabled again (it was enabled in 0.8.4) as
137 it caused problems on certain platforms.
137 it caused problems on certain platforms.
138
138
139
139
140 Backwards incompatible changes
140 Backwards incompatible changes
141 ------------------------------
141 ------------------------------
142
142
143 * The ``clusterfile`` options of the :command:`ipcluster` command has been
143 * The ``clusterfile`` options of the :command:`ipcluster` command has been
144 removed as it was not working and it will be replaced soon by something much
144 removed as it was not working and it will be replaced soon by something much
145 more robust.
145 more robust.
146
146
147 * The :mod:`IPython.kernel` configuration now properly find the user's
147 * The :mod:`IPython.kernel` configuration now properly find the user's
148 IPython directory.
148 IPython directory.
149
149
150 * In ipapi, the :func:`make_user_ns` function has been replaced with
150 * In ipapi, the :func:`make_user_ns` function has been replaced with
151 :func:`make_user_namespaces`, to support dict subclasses in namespace
151 :func:`make_user_namespaces`, to support dict subclasses in namespace
152 creation.
152 creation.
153
153
154 * :class:`IPython.kernel.client.Task` has been renamed
154 * :class:`IPython.kernel.client.Task` has been renamed
155 :class:`IPython.kernel.client.StringTask` to make way for new task types.
155 :class:`IPython.kernel.client.StringTask` to make way for new task types.
156
156
157 * The keyword argument `style` has been renamed `dist` in `scatter`, `gather`
157 * The keyword argument `style` has been renamed `dist` in `scatter`, `gather`
158 and `map`.
158 and `map`.
159
159
160 * Renamed the values that the rename `dist` keyword argument can have from
160 * Renamed the values that the rename `dist` keyword argument can have from
161 `'basic'` to `'b'`.
161 `'basic'` to `'b'`.
162
162
163 * IPython has a larger set of dependencies if you want all of its capabilities.
163 * IPython has a larger set of dependencies if you want all of its capabilities.
164 See the ``setup.py`` script for details.
164 See the ``setup.py`` script for details.
165
165
166 * The constructors for :class:`IPython.kernel.client.MultiEngineClient` and
166 * The constructors for :class:`IPython.kernel.client.MultiEngineClient` and
167 :class:`IPython.kernel.client.TaskClient` no longer take the (ip,port) tuple.
167 :class:`IPython.kernel.client.TaskClient` no longer take the (ip,port) tuple.
168 Instead they take the filename of a file that contains the FURL for that
168 Instead they take the filename of a file that contains the FURL for that
169 client. If the FURL file is in your IPYTHONDIR, it will be found automatically
169 client. If the FURL file is in your IPYTHONDIR, it will be found automatically
170 and the constructor can be left empty.
170 and the constructor can be left empty.
171
171
172 * The asynchronous clients in :mod:`IPython.kernel.asyncclient` are now created
172 * The asynchronous clients in :mod:`IPython.kernel.asyncclient` are now created
173 using the factory functions :func:`get_multiengine_client` and
173 using the factory functions :func:`get_multiengine_client` and
174 :func:`get_task_client`. These return a `Deferred` to the actual client.
174 :func:`get_task_client`. These return a `Deferred` to the actual client.
175
175
176 * The command line options to `ipcontroller` and `ipengine` have changed to
176 * The command line options to `ipcontroller` and `ipengine` have changed to
177 reflect the new Foolscap network protocol and the FURL files. Please see the
177 reflect the new Foolscap network protocol and the FURL files. Please see the
178 help for these scripts for details.
178 help for these scripts for details.
179
179
180 * The configuration files for the kernel have changed because of the Foolscap
180 * The configuration files for the kernel have changed because of the Foolscap
181 stuff. If you were using custom config files before, you should delete them
181 stuff. If you were using custom config files before, you should delete them
182 and regenerate new ones.
182 and regenerate new ones.
183
183
184 Changes merged in from IPython1
184 Changes merged in from IPython1
185 -------------------------------
185 -------------------------------
186
186
187 New features
187 New features
188 ............
188 ............
189
189
190 * Much improved ``setup.py`` and ``setupegg.py`` scripts. Because Twisted and
190 * Much improved ``setup.py`` and ``setupegg.py`` scripts. Because Twisted and
191 zope.interface are now easy installable, we can declare them as dependencies
191 zope.interface are now easy installable, we can declare them as dependencies
192 in our setupegg.py script.
192 in our setupegg.py script.
193
193
194 * IPython is now compatible with Twisted 2.5.0 and 8.x.
194 * IPython is now compatible with Twisted 2.5.0 and 8.x.
195
195
196 * Added a new example of how to use :mod:`ipython1.kernel.asynclient`.
196 * Added a new example of how to use :mod:`ipython1.kernel.asynclient`.
197
197
198 * Initial draft of a process daemon in :mod:`ipython1.daemon`. This has not
198 * Initial draft of a process daemon in :mod:`ipython1.daemon`. This has not
199 been merged into IPython and is still in `ipython1-dev`.
199 been merged into IPython and is still in `ipython1-dev`.
200
200
201 * The ``TaskController`` now has methods for getting the queue status.
201 * The ``TaskController`` now has methods for getting the queue status.
202
202
203 * The ``TaskResult`` objects not have information about how long the task
203 * The ``TaskResult`` objects not have information about how long the task
204 took to run.
204 took to run.
205
205
206 * We are attaching additional attributes to exceptions ``(_ipython_*)`` that
206 * We are attaching additional attributes to exceptions ``(_ipython_*)`` that
207 we use to carry additional info around.
207 we use to carry additional info around.
208
208
209 * New top-level module :mod:`asyncclient` that has asynchronous versions (that
209 * New top-level module :mod:`asyncclient` that has asynchronous versions (that
210 return deferreds) of the client classes. This is designed to users who want
210 return deferreds) of the client classes. This is designed to users who want
211 to run their own Twisted reactor.
211 to run their own Twisted reactor.
212
212
213 * All the clients in :mod:`client` are now based on Twisted. This is done by
213 * All the clients in :mod:`client` are now based on Twisted. This is done by
214 running the Twisted reactor in a separate thread and using the
214 running the Twisted reactor in a separate thread and using the
215 :func:`blockingCallFromThread` function that is in recent versions of Twisted.
215 :func:`blockingCallFromThread` function that is in recent versions of Twisted.
216
216
217 * Functions can now be pushed/pulled to/from engines using
217 * Functions can now be pushed/pulled to/from engines using
218 :meth:`MultiEngineClient.push_function` and
218 :meth:`MultiEngineClient.push_function` and
219 :meth:`MultiEngineClient.pull_function`.
219 :meth:`MultiEngineClient.pull_function`.
220
220
221 * Gather/scatter are now implemented in the client to reduce the work load
221 * Gather/scatter are now implemented in the client to reduce the work load
222 of the controller and improve performance.
222 of the controller and improve performance.
223
223
224 * Complete rewrite of the IPython docuementation. All of the documentation
224 * Complete rewrite of the IPython documentation. All of the documentation
225 from the IPython website has been moved into docs/source as restructured
225 from the IPython website has been moved into docs/source as restructured
226 text documents. PDF and HTML documentation are being generated using
226 text documents. PDF and HTML documentation are being generated using
227 Sphinx.
227 Sphinx.
228
228
229 * New developer oriented documentation: development guidelines and roadmap.
229 * New developer oriented documentation: development guidelines and roadmap.
230
230
231 * Traditional ``ChangeLog`` has been changed to a more useful ``changes.txt``
231 * Traditional ``ChangeLog`` has been changed to a more useful ``changes.txt``
232 file that is organized by release and is meant to provide something more
232 file that is organized by release and is meant to provide something more
233 relevant for users.
233 relevant for users.
234
234
235 Bug fixes
235 Bug fixes
236 .........
236 .........
237
237
238 * Created a proper ``MANIFEST.in`` file to create source distributions.
238 * Created a proper ``MANIFEST.in`` file to create source distributions.
239
239
240 * Fixed a bug in the ``MultiEngine`` interface. Previously, multi-engine
240 * Fixed a bug in the ``MultiEngine`` interface. Previously, multi-engine
241 actions were being collected with a :class:`DeferredList` with
241 actions were being collected with a :class:`DeferredList` with
242 ``fireononeerrback=1``. This meant that methods were returning
242 ``fireononeerrback=1``. This meant that methods were returning
243 before all engines had given their results. This was causing extremely odd
243 before all engines had given their results. This was causing extremely odd
244 bugs in certain cases. To fix this problem, we have 1) set
244 bugs in certain cases. To fix this problem, we have 1) set
245 ``fireononeerrback=0`` to make sure all results (or exceptions) are in
245 ``fireononeerrback=0`` to make sure all results (or exceptions) are in
246 before returning and 2) introduced a :exc:`CompositeError` exception
246 before returning and 2) introduced a :exc:`CompositeError` exception
247 that wraps all of the engine exceptions. This is a huge change as it means
247 that wraps all of the engine exceptions. This is a huge change as it means
248 that users will have to catch :exc:`CompositeError` rather than the actual
248 that users will have to catch :exc:`CompositeError` rather than the actual
249 exception.
249 exception.
250
250
251 Backwards incompatible changes
251 Backwards incompatible changes
252 ..............................
252 ..............................
253
253
254 * All names have been renamed to conform to the lowercase_with_underscore
254 * All names have been renamed to conform to the lowercase_with_underscore
255 convention. This will require users to change references to all names like
255 convention. This will require users to change references to all names like
256 ``queueStatus`` to ``queue_status``.
256 ``queueStatus`` to ``queue_status``.
257
257
258 * Previously, methods like :meth:`MultiEngineClient.push` and
258 * Previously, methods like :meth:`MultiEngineClient.push` and
259 :meth:`MultiEngineClient.push` used ``*args`` and ``**kwargs``. This was
259 :meth:`MultiEngineClient.push` used ``*args`` and ``**kwargs``. This was
260 becoming a problem as we weren't able to introduce new keyword arguments into
260 becoming a problem as we weren't able to introduce new keyword arguments into
261 the API. Now these methods simple take a dict or sequence. This has also
261 the API. Now these methods simple take a dict or sequence. This has also
262 allowed us to get rid of the ``*All`` methods like :meth:`pushAll` and
262 allowed us to get rid of the ``*All`` methods like :meth:`pushAll` and
263 :meth:`pullAll`. These things are now handled with the ``targets`` keyword
263 :meth:`pullAll`. These things are now handled with the ``targets`` keyword
264 argument that defaults to ``'all'``.
264 argument that defaults to ``'all'``.
265
265
266 * The :attr:`MultiEngineClient.magicTargets` has been renamed to
266 * The :attr:`MultiEngineClient.magicTargets` has been renamed to
267 :attr:`MultiEngineClient.targets`.
267 :attr:`MultiEngineClient.targets`.
268
268
269 * All methods in the MultiEngine interface now accept the optional keyword
269 * All methods in the MultiEngine interface now accept the optional keyword
270 argument ``block``.
270 argument ``block``.
271
271
272 * Renamed :class:`RemoteController` to :class:`MultiEngineClient` and
272 * Renamed :class:`RemoteController` to :class:`MultiEngineClient` and
273 :class:`TaskController` to :class:`TaskClient`.
273 :class:`TaskController` to :class:`TaskClient`.
274
274
275 * Renamed the top-level module from :mod:`api` to :mod:`client`.
275 * Renamed the top-level module from :mod:`api` to :mod:`client`.
276
276
277 * Most methods in the multiengine interface now raise a :exc:`CompositeError`
277 * Most methods in the multiengine interface now raise a :exc:`CompositeError`
278 exception that wraps the user's exceptions, rather than just raising the raw
278 exception that wraps the user's exceptions, rather than just raising the raw
279 user's exception.
279 user's exception.
280
280
281 * Changed the ``setupNS`` and ``resultNames`` in the ``Task`` class to ``push``
281 * Changed the ``setupNS`` and ``resultNames`` in the ``Task`` class to ``push``
282 and ``pull``.
282 and ``pull``.
283
283
@@ -1,1798 +1,1798
1 ============
1 ============
2 7.x Series
2 7.x Series
3 ============
3 ============
4
4
5 .. _version 7.34:
5 .. _version 7.34:
6
6
7 IPython 7.34
7 IPython 7.34
8 ============
8 ============
9
9
10 This version contains a single fix: fix uncaught BdbQuit exceptions on ipdb
10 This version contains a single fix: fix uncaught BdbQuit exceptions on ipdb
11 exit :ghpull:`13668`
11 exit :ghpull:`13668`
12
12
13
13
14 .. _version 7.33:
14 .. _version 7.33:
15
15
16 IPython 7.33
16 IPython 7.33
17 ============
17 ============
18
18
19 - Allow IPython hooks to receive current cell ids when frontend support it. See
19 - Allow IPython hooks to receive current cell ids when frontend support it. See
20 :ghpull:`13600`
20 :ghpull:`13600`
21
21
22 - ``?`` does not trigger the insertion of a new cell anymore as most frontend
22 - ``?`` does not trigger the insertion of a new cell anymore as most frontend
23 allow proper multiline edition. :ghpull:`13625`
23 allow proper multiline edition. :ghpull:`13625`
24
24
25
25
26 .. _version 7.32:
26 .. _version 7.32:
27
27
28 IPython 7.32
28 IPython 7.32
29 ============
29 ============
30
30
31
31
32
32
33 Autoload magic lazily
33 Autoload magic lazily
34 ---------------------
34 ---------------------
35
35
36 The ability to configure magics to be lazily loaded has been added to IPython.
36 The ability to configure magics to be lazily loaded has been added to IPython.
37 See the ``ipython --help-all`` section on ``MagicsManager.lazy_magic``.
37 See the ``ipython --help-all`` section on ``MagicsManager.lazy_magic``.
38 One can now use::
38 One can now use::
39
39
40 c.MagicsManager.lazy_magics = {
40 c.MagicsManager.lazy_magics = {
41 "my_magic": "slow.to.import",
41 "my_magic": "slow.to.import",
42 "my_other_magic": "also.slow",
42 "my_other_magic": "also.slow",
43 }
43 }
44
44
45 And on first use of ``%my_magic``, or corresponding cell magic, or other line magic,
45 And on first use of ``%my_magic``, or corresponding cell magic, or other line magic,
46 the corresponding ``load_ext`` will be called just before trying to invoke the magic.
46 the corresponding ``load_ext`` will be called just before trying to invoke the magic.
47
47
48 Misc
48 Misc
49 ----
49 ----
50
50
51 - Update sphinxify for Docrepr 0.2.0 :ghpull:`13503`.
51 - Update sphinxify for Docrepr 0.2.0 :ghpull:`13503`.
52 - Set co_name for cells run line by line (to fix debugging with Python 3.10)
52 - Set co_name for cells run line by line (to fix debugging with Python 3.10)
53 :ghpull:`13535`
53 :ghpull:`13535`
54
54
55
55
56 Many thanks to all the contributors to this release. You can find all individual
56 Many thanks to all the contributors to this release. You can find all individual
57 contributions to this milestone `on github
57 contributions to this milestone `on github
58 <https://github.com/ipython/ipython/milestone/99>`__.
58 <https://github.com/ipython/ipython/milestone/99>`__.
59
59
60 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
60 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
61 work on IPython and related libraries.
61 work on IPython and related libraries.
62
62
63 .. _version 7.31:
63 .. _version 7.31:
64
64
65 IPython 7.31
65 IPython 7.31
66 ============
66 ============
67
67
68 IPython 7.31 brings a couple of backports and fixes from the 8.0 branches,
68 IPython 7.31 brings a couple of backports and fixes from the 8.0 branches,
69 it is likely one of the last releases of the 7.x series, as 8.0 will probably be released
69 it is likely one of the last releases of the 7.x series, as 8.0 will probably be released
70 between this release and what would have been 7.32.
70 between this release and what would have been 7.32.
71
71
72 Please test 8.0 beta/rc releases in addition to this release.
72 Please test 8.0 beta/rc releases in addition to this release.
73
73
74 This Releases:
74 This Releases:
75 - Backport some fixes for Python 3.10 (:ghpull:`13412`)
75 - Backport some fixes for Python 3.10 (:ghpull:`13412`)
76 - use full-alpha transparency on dvipng rendered LaTeX (:ghpull:`13372`)
76 - use full-alpha transparency on dvipng rendered LaTeX (:ghpull:`13372`)
77
77
78 Many thanks to all the contributors to this release. You can find all individual
78 Many thanks to all the contributors to this release. You can find all individual
79 contributions to this milestone `on github
79 contributions to this milestone `on github
80 <https://github.com/ipython/ipython/milestone/95>`__.
80 <https://github.com/ipython/ipython/milestone/95>`__.
81
81
82 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
82 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
83 work on IPython and related libraries.
83 work on IPython and related libraries.
84
84
85
85
86 .. _version 7.30:
86 .. _version 7.30:
87
87
88 IPython 7.30
88 IPython 7.30
89 ============
89 ============
90
90
91 IPython 7.30 fixes a couple of bugs introduce in previous releases (in
91 IPython 7.30 fixes a couple of bugs introduce in previous releases (in
92 particular with respect to path handling), and introduce a few features and
92 particular with respect to path handling), and introduce a few features and
93 improvements:
93 improvements:
94
94
95 Notably we will highlight :ghpull:`13267` "Document that ``%run`` can execute
95 Notably we will highlight :ghpull:`13267` "Document that ``%run`` can execute
96 notebooks and ipy scripts.", which is the first commit of Fernando PΓ©rez since
96 notebooks and ipy scripts.", which is the first commit of Fernando PΓ©rez since
97 mid 2016 (IPython 5.1). If you are new to IPython, Fernando created IPython in
97 mid 2016 (IPython 5.1). If you are new to IPython, Fernando created IPython in
98 2001. The other most recent contribution of Fernando to IPython itself was
98 2001. The other most recent contribution of Fernando to IPython itself was
99 May 2018, by reviewing and merging PRs. I want to note that Fernando is still
99 May 2018, by reviewing and merging PRs. I want to note that Fernando is still
100 active but mostly as a mentor and leader of the whole Jupyter organisation, but
100 active but mostly as a mentor and leader of the whole Jupyter organisation, but
101 we're still happy to see him contribute code !
101 we're still happy to see him contribute code !
102
102
103 :ghpull:`13290` "Use sphinxify (if available) in object_inspect_mime path"
103 :ghpull:`13290` "Use sphinxify (if available) in object_inspect_mime path"
104 should allow richer Repr of docstrings when using jupyterlab inspector.
104 should allow richer Repr of docstrings when using jupyterlab inspector.
105
105
106 :ghpull:`13311` make the debugger use ``ThreadPoolExecutor`` for debugger cmdloop.
106 :ghpull:`13311` make the debugger use ``ThreadPoolExecutor`` for debugger cmdloop.
107 This should fix some issues/infinite loop, but let us know if you come across
107 This should fix some issues/infinite loop, but let us know if you come across
108 any regressions. In particular this fixes issues with `kmaork/madbg <https://github.com/kmaork/madbg>`_,
108 any regressions. In particular this fixes issues with `kmaork/madbg <https://github.com/kmaork/madbg>`_,
109 a remote debugger for IPython.
109 a remote debugger for IPython.
110
110
111 Note that this is likely the ante-penultimate release of IPython 7.x as a stable
111 Note that this is likely the ante-penultimate release of IPython 7.x as a stable
112 branch, as I hope to release IPython 8.0 as well as IPython 7.31 next
112 branch, as I hope to release IPython 8.0 as well as IPython 7.31 next
113 month/early 2022.
113 month/early 2022.
114
114
115 IPython 8.0 will drop support for Python 3.7, removed nose as a dependency, and
115 IPython 8.0 will drop support for Python 3.7, removed nose as a dependency, and
116 7.x will only get critical bug fixes with 8.x becoming the new stable. This will
116 7.x will only get critical bug fixes with 8.x becoming the new stable. This will
117 not be possible without `NumFOCUS Small Development Grants
117 not be possible without `NumFOCUS Small Development Grants
118 <https://numfocus.org/programs/small-development-grants>`_ Which allowed us to
118 <https://numfocus.org/programs/small-development-grants>`_ Which allowed us to
119 hire `Nikita Kniazev <https://github.com/Kojoley>`_ who provide Python and C++
119 hire `Nikita Kniazev <https://github.com/Kojoley>`_ who provide Python and C++
120 help and contracting work.
120 help and contracting work.
121
121
122
122
123 Many thanks to all the contributors to this release. You can find all individual
123 Many thanks to all the contributors to this release. You can find all individual
124 contributions to this milestone `on github
124 contributions to this milestone `on github
125 <https://github.com/ipython/ipython/milestone/94?closed=1>`__.
125 <https://github.com/ipython/ipython/milestone/94?closed=1>`__.
126
126
127 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
127 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
128 work on IPython and related libraries.
128 work on IPython and related libraries.
129
129
130
130
131 .. _version 7.29:
131 .. _version 7.29:
132
132
133 IPython 7.29
133 IPython 7.29
134 ============
134 ============
135
135
136
136
137 IPython 7.29 brings a couple of new functionalities to IPython and a number of bugfixes.
137 IPython 7.29 brings a couple of new functionalities to IPython and a number of bugfixes.
138 It is one of the largest recent release, relatively speaking, with close to 15 Pull Requests.
138 It is one of the largest recent release, relatively speaking, with close to 15 Pull Requests.
139
139
140
140
141 - fix an issue where base64 was returned instead of bytes when showing figures :ghpull:`13162`
141 - fix an issue where base64 was returned instead of bytes when showing figures :ghpull:`13162`
142 - fix compatibility with PyQt6, PySide 6 :ghpull:`13172`. This may be of
142 - fix compatibility with PyQt6, PySide 6 :ghpull:`13172`. This may be of
143 interest if you are running on Apple Silicon as only qt6.2+ is natively
143 interest if you are running on Apple Silicon as only qt6.2+ is natively
144 compatible.
144 compatible.
145 - fix matplotlib qtagg eventloop :ghpull:`13179`
145 - fix matplotlib qtagg eventloop :ghpull:`13179`
146 - Multiple docs fixes, typos, ... etc.
146 - Multiple docs fixes, typos, ... etc.
147 - Debugger will now exit by default on SigInt :ghpull:`13218`, this will be
147 - Debugger will now exit by default on SigInt :ghpull:`13218`, this will be
148 useful in notebook/lab if you forgot to exit the debugger. "Interrupt Kernel"
148 useful in notebook/lab if you forgot to exit the debugger. "Interrupt Kernel"
149 will now exist the debugger.
149 will now exist the debugger.
150
150
151 It give Pdb the ability to skip code in decorators. If functions contain a
151 It give Pdb the ability to skip code in decorators. If functions contain a
152 special value names ``__debuggerskip__ = True|False``, the function will not be
152 special value names ``__debuggerskip__ = True|False``, the function will not be
153 stepped into, and Pdb will step into lower frames only if the value is set to
153 stepped into, and Pdb will step into lower frames only if the value is set to
154 ``False``. The exact behavior is still likely to have corner cases and will be
154 ``False``. The exact behavior is still likely to have corner cases and will be
155 refined in subsequent releases. Feedback welcome. See the debugger module
155 refined in subsequent releases. Feedback welcome. See the debugger module
156 documentation for more info. Thanks to the `D. E. Shaw
156 documentation for more info. Thanks to the `D. E. Shaw
157 group <https://deshaw.com/>`__ for funding this feature.
157 group <https://deshaw.com/>`__ for funding this feature.
158
158
159 The main branch of IPython is receiving a number of changes as we received a
159 The main branch of IPython is receiving a number of changes as we received a
160 `NumFOCUS SDG <https://numfocus.org/programs/small-development-grants>`__
160 `NumFOCUS SDG <https://numfocus.org/programs/small-development-grants>`__
161 ($4800), to help us finish replacing ``nose`` by ``pytest``, and make IPython
161 ($4800), to help us finish replacing ``nose`` by ``pytest``, and make IPython
162 future proof with an 8.0 release.
162 future proof with an 8.0 release.
163
163
164
164
165 Many thanks to all the contributors to this release. You can find all individual
165 Many thanks to all the contributors to this release. You can find all individual
166 contributions to this milestone `on github
166 contributions to this milestone `on github
167 <https://github.com/ipython/ipython/milestone/93>`__.
167 <https://github.com/ipython/ipython/milestone/93>`__.
168
168
169 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
169 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
170 work on IPython and related libraries.
170 work on IPython and related libraries.
171
171
172
172
173 .. _version 7.28:
173 .. _version 7.28:
174
174
175 IPython 7.28
175 IPython 7.28
176 ============
176 ============
177
177
178
178
179 IPython 7.28 is again a minor release that mostly bring bugfixes, and couple of
179 IPython 7.28 is again a minor release that mostly bring bugfixes, and couple of
180 improvement. Many thanks to MrMino, who again did all the work this month, and
180 improvement. Many thanks to MrMino, who again did all the work this month, and
181 made a number of documentation improvements.
181 made a number of documentation improvements.
182
182
183 Here is a non-exhaustive list of changes,
183 Here is a non-exhaustive list of changes,
184
184
185 Fixes:
185 Fixes:
186
186
187 - async with doesn't allow newlines :ghpull:`13090`
187 - async with doesn't allow newlines :ghpull:`13090`
188 - Dynamically changing to vi mode via %config magic) :ghpull:`13091`
188 - Dynamically changing to vi mode via %config magic) :ghpull:`13091`
189
189
190 Virtualenv handling fixes:
190 Virtualenv handling fixes:
191
191
192 - init_virtualenv now uses Pathlib :ghpull:`12548`
192 - init_virtualenv now uses Pathlib :ghpull:`12548`
193 - Fix Improper path comparison of virtualenv directories :ghpull:`13140`
193 - Fix Improper path comparison of virtualenv directories :ghpull:`13140`
194 - Fix virtual environment user warning for lower case pathes :ghpull:`13094`
194 - Fix virtual environment user warning for lower case paths :ghpull:`13094`
195 - Adapt to all sorts of drive names for cygwin :ghpull:`13153`
195 - Adapt to all sorts of drive names for cygwin :ghpull:`13153`
196
196
197 New Features:
197 New Features:
198
198
199 - enable autoplay in embed YouTube player :ghpull:`13133`
199 - enable autoplay in embed YouTube player :ghpull:`13133`
200
200
201 Documentation:
201 Documentation:
202
202
203 - Fix formatting for the core.interactiveshell documentation :ghpull:`13118`
203 - Fix formatting for the core.interactiveshell documentation :ghpull:`13118`
204 - Fix broken ipyparallel's refs :ghpull:`13138`
204 - Fix broken ipyparallel's refs :ghpull:`13138`
205 - Improve formatting of %time documentation :ghpull:`13125`
205 - Improve formatting of %time documentation :ghpull:`13125`
206 - Reword the YouTubeVideo autoplay WN :ghpull:`13147`
206 - Reword the YouTubeVideo autoplay WN :ghpull:`13147`
207
207
208
208
209 Highlighted features
209 Highlighted features
210 --------------------
210 --------------------
211
211
212
212
213 ``YouTubeVideo`` autoplay and the ability to add extra attributes to ``IFrame``
213 ``YouTubeVideo`` autoplay and the ability to add extra attributes to ``IFrame``
214 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
214 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
215
215
216 You can add any extra attributes to the ``<iframe>`` tag using the new
216 You can add any extra attributes to the ``<iframe>`` tag using the new
217 ``extras`` argument in the ``IFrame`` class. For example::
217 ``extras`` argument in the ``IFrame`` class. For example::
218
218
219 In [1]: from IPython.display import IFrame
219 In [1]: from IPython.display import IFrame
220
220
221 In [2]: IFrame(src="src", width=300, height=300, extras=['loading="eager"'])
221 In [2]: IFrame(src="src", width=300, height=300, extras=['loading="eager"'])
222
222
223 The above cells will result in the following HTML code being displayed in a
223 The above cells will result in the following HTML code being displayed in a
224 notebook::
224 notebook::
225
225
226 <iframe
226 <iframe
227 width="300"
227 width="300"
228 height="300"
228 height="300"
229 src="src"
229 src="src"
230 frameborder="0"
230 frameborder="0"
231 allowfullscreen
231 allowfullscreen
232 loading="eager"
232 loading="eager"
233 ></iframe>
233 ></iframe>
234
234
235 Related to the above, the ``YouTubeVideo`` class now takes an
235 Related to the above, the ``YouTubeVideo`` class now takes an
236 ``allow_autoplay`` flag, which sets up the iframe of the embedded YouTube video
236 ``allow_autoplay`` flag, which sets up the iframe of the embedded YouTube video
237 such that it allows autoplay.
237 such that it allows autoplay.
238
238
239 .. note::
239 .. note::
240 Whether this works depends on the autoplay policy of the browser rendering
240 Whether this works depends on the autoplay policy of the browser rendering
241 the HTML allowing it. It also could get blocked by some browser extensions.
241 the HTML allowing it. It also could get blocked by some browser extensions.
242
242
243 Try it out!
243 Try it out!
244
244
245 ::
245 ::
246
246
247 In [1]: from IPython.display import YouTubeVideo
247 In [1]: from IPython.display import YouTubeVideo
248
248
249 In [2]: YouTubeVideo("dQw4w9WgXcQ", allow_autoplay=True)
249 In [2]: YouTubeVideo("dQw4w9WgXcQ", allow_autoplay=True)
250
250
251
251
252
252
253 Thanks
253 Thanks
254 ------
254 ------
255
255
256 Many thanks to all the contributors to this release. You can find all individual
256 Many thanks to all the contributors to this release. You can find all individual
257 contributions to this milestone `on github
257 contributions to this milestone `on github
258 <https://github.com/ipython/ipython/milestone/92>`__.
258 <https://github.com/ipython/ipython/milestone/92>`__.
259
259
260 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
260 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
261 work on IPython and related libraries.
261 work on IPython and related libraries.
262
262
263
263
264 .. _version 7.27:
264 .. _version 7.27:
265
265
266 IPython 7.27
266 IPython 7.27
267 ============
267 ============
268
268
269 IPython 7.27 is a minor release that fixes a couple of issues and compatibility.
269 IPython 7.27 is a minor release that fixes a couple of issues and compatibility.
270
270
271 - Add support for GTK4 :ghpull:`131011`
271 - Add support for GTK4 :ghpull:`131011`
272 - Add support for Qt6 :ghpull:`13085`
272 - Add support for Qt6 :ghpull:`13085`
273 - Fix an issue with pip magic on windows :ghpull:`13093`
273 - Fix an issue with pip magic on windows :ghpull:`13093`
274
274
275 Thanks
275 Thanks
276 ------
276 ------
277
277
278 Many thanks to all the contributors to this release. You can find all individual
278 Many thanks to all the contributors to this release. You can find all individual
279 contributions to this milestone `on github
279 contributions to this milestone `on github
280 <https://github.com/ipython/ipython/milestone/91>`__.
280 <https://github.com/ipython/ipython/milestone/91>`__.
281
281
282 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
282 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
283 work on IPython and related libraries.
283 work on IPython and related libraries.
284
284
285 .. _version 7.26:
285 .. _version 7.26:
286
286
287 IPython 7.26
287 IPython 7.26
288 ============
288 ============
289
289
290 IPython 7.26 is a minor release that fixes a couple of issues, updates in API
290 IPython 7.26 is a minor release that fixes a couple of issues, updates in API
291 and Copyright/Licenses issues around various part of the codebase.
291 and Copyright/Licenses issues around various part of the codebase.
292
292
293 We'll highlight `this issue <https://github.com/ipython/ipython/issues/13039>`
293 We'll highlight `this issue <https://github.com/ipython/ipython/issues/13039>`
294 pointing out we were including and refereeing to code from Stack Overflow which
294 pointing out we were including and refereeing to code from Stack Overflow which
295 was CC-BY-SA, hence incompatible with the BSD license of IPython. This lead us
295 was CC-BY-SA, hence incompatible with the BSD license of IPython. This lead us
296 to a rewriting of the corresponding logic which in our case was done in a more
296 to a rewriting of the corresponding logic which in our case was done in a more
297 efficient way (in our case we were searching string prefixes instead of full
297 efficient way (in our case we were searching string prefixes instead of full
298 strings).
298 strings).
299
299
300 You will notice also a number of documentation improvements and cleanup.
300 You will notice also a number of documentation improvements and cleanup.
301
301
302 Of particular interest are the following Pull-requests:
302 Of particular interest are the following Pull-requests:
303
303
304
304
305 - The IPython directive now uses Sphinx logging for warnings. :ghpull:`13030`.
305 - The IPython directive now uses Sphinx logging for warnings. :ghpull:`13030`.
306 - Add expiry days option to pastebin magic and change http protocol to https.
306 - Add expiry days option to pastebin magic and change http protocol to https.
307 :ghpull:`13056`
307 :ghpull:`13056`
308 - Make Ipython.utils.timing work with jupyterlite :ghpull:`13050`.
308 - Make Ipython.utils.timing work with jupyterlite :ghpull:`13050`.
309
309
310 Pastebin magic expiry days option
310 Pastebin magic expiry days option
311 ---------------------------------
311 ---------------------------------
312
312
313 The Pastebin magic now has ``-e`` option to determine
313 The Pastebin magic now has ``-e`` option to determine
314 the number of days for paste expiration. For example
314 the number of days for paste expiration. For example
315 the paste that created with ``%pastebin -e 20 1`` magic will
315 the paste that created with ``%pastebin -e 20 1`` magic will
316 be available for next 20 days.
316 be available for next 20 days.
317
317
318
318
319
319
320
320
321
321
322 Thanks
322 Thanks
323 ------
323 ------
324
324
325 Many thanks to all the contributors to this release and in particular MrMino who
325 Many thanks to all the contributors to this release and in particular MrMino who
326 is doing most of the work those days. You can find all individual contributions
326 is doing most of the work those days. You can find all individual contributions
327 to this milestone `on github <https://github.com/ipython/ipython/milestone/90>`__.
327 to this milestone `on github <https://github.com/ipython/ipython/milestone/90>`__.
328
328
329 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
329 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
330 work on IPython and related libraries.
330 work on IPython and related libraries.
331
331
332
332
333 .. _version 7.25:
333 .. _version 7.25:
334
334
335 IPython 7.25
335 IPython 7.25
336 ============
336 ============
337
337
338 IPython 7.25 is a minor release that contains a single bugfix, which is highly
338 IPython 7.25 is a minor release that contains a single bugfix, which is highly
339 recommended for all users of ipdb, ipython debugger %debug magic and similar.
339 recommended for all users of ipdb, ipython debugger %debug magic and similar.
340
340
341 Issuing commands like ``where`` from within the debugger would reset the
341 Issuing commands like ``where`` from within the debugger would reset the
342 local variables changes made by the user. It is interesting to look at the root
342 local variables changes made by the user. It is interesting to look at the root
343 cause of the issue as accessing an attribute (``frame.f_locals``) would trigger
343 cause of the issue as accessing an attribute (``frame.f_locals``) would trigger
344 this side effects.
344 this side effects.
345
345
346 Thanks in particular to the patience from the reporters at D.E. Shaw for their
346 Thanks in particular to the patience from the reporters at D.E. Shaw for their
347 initial bug report that was due to a similar coding oversight in an extension,
347 initial bug report that was due to a similar coding oversight in an extension,
348 and who took time to debug and narrow down the problem.
348 and who took time to debug and narrow down the problem.
349
349
350 Thanks
350 Thanks
351 ------
351 ------
352
352
353 Many thanks to all the contributors to this release you can find all individual
353 Many thanks to all the contributors to this release you can find all individual
354 contributions to this milestone `on github <https://github.com/ipython/ipython/milestone/89>`__.
354 contributions to this milestone `on github <https://github.com/ipython/ipython/milestone/89>`__.
355
355
356 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
356 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
357 work on IPython and related libraries.
357 work on IPython and related libraries.
358
358
359
359
360 .. _version 7.24:
360 .. _version 7.24:
361
361
362 IPython 7.24
362 IPython 7.24
363 ============
363 ============
364
364
365 Third release of IPython for 2021, mostly containing bug fixes. A couple of not
365 Third release of IPython for 2021, mostly containing bug fixes. A couple of not
366 typical updates:
366 typical updates:
367
367
368 Misc
368 Misc
369 ----
369 ----
370
370
371
371
372 - Fix an issue where ``%recall`` would both succeeded and print an error message
372 - Fix an issue where ``%recall`` would both succeeded and print an error message
373 it failed. :ghpull:`12952`
373 it failed. :ghpull:`12952`
374 - Drop support for NumPy 1.16 – practically has no effect beyond indicating in
374 - Drop support for NumPy 1.16 – practically has no effect beyond indicating in
375 package metadata that we do not support it. :ghpull:`12937`
375 package metadata that we do not support it. :ghpull:`12937`
376
376
377 Debugger improvements
377 Debugger improvements
378 ---------------------
378 ---------------------
379
379
380 The debugger (and ``%debug`` magic) have been improved and can skip or hide frames
380 The debugger (and ``%debug`` magic) have been improved and can skip or hide frames
381 originating from files that are not writable to the user, as these are less
381 originating from files that are not writable to the user, as these are less
382 likely to be the source of errors, or be part of system files this can be a useful
382 likely to be the source of errors, or be part of system files this can be a useful
383 addition when debugging long errors.
383 addition when debugging long errors.
384
384
385 In addition to the global ``skip_hidden True|False`` command, the debugger has
385 In addition to the global ``skip_hidden True|False`` command, the debugger has
386 gained finer grained control of predicates as to whether to a frame should be
386 gained finer grained control of predicates as to whether to a frame should be
387 considered hidden. So far 3 predicates are available :
387 considered hidden. So far 3 predicates are available :
388
388
389 - ``tbhide``: frames containing the local variable ``__tracebackhide__`` set to
389 - ``tbhide``: frames containing the local variable ``__tracebackhide__`` set to
390 True.
390 True.
391 - ``readonly``: frames originating from readonly files, set to False.
391 - ``readonly``: frames originating from readonly files, set to False.
392 - ``ipython_internal``: frames that are likely to be from IPython internal
392 - ``ipython_internal``: frames that are likely to be from IPython internal
393 code, set to True.
393 code, set to True.
394
394
395 You can toggle individual predicates during a session with
395 You can toggle individual predicates during a session with
396
396
397 .. code-block::
397 .. code-block::
398
398
399 ipdb> skip_predicates readonly True
399 ipdb> skip_predicates readonly True
400
400
401 Read-only files will now be considered hidden frames.
401 Read-only files will now be considered hidden frames.
402
402
403
403
404 You can call ``skip_predicates`` without arguments to see the states of current
404 You can call ``skip_predicates`` without arguments to see the states of current
405 predicates:
405 predicates:
406
406
407 .. code-block::
407 .. code-block::
408
408
409 ipdb> skip_predicates
409 ipdb> skip_predicates
410 current predicates:
410 current predicates:
411 tbhide : True
411 tbhide : True
412 readonly : False
412 readonly : False
413 ipython_internal : True
413 ipython_internal : True
414
414
415 If all predicates are set to ``False``, ``skip_hidden`` will practically have
415 If all predicates are set to ``False``, ``skip_hidden`` will practically have
416 no effect. We attempt to warn you when all predicates are False.
416 no effect. We attempt to warn you when all predicates are False.
417
417
418 Note that the ``readonly`` predicate may increase disk access as we check for
418 Note that the ``readonly`` predicate may increase disk access as we check for
419 file access permission for all frames on many command invocation, but is usually
419 file access permission for all frames on many command invocation, but is usually
420 cached by operating systems. Let us know if you encounter any issues.
420 cached by operating systems. Let us know if you encounter any issues.
421
421
422 As the IPython debugger does not use the traitlets infrastructure for
422 As the IPython debugger does not use the traitlets infrastructure for
423 configuration, by editing your ``.pdbrc`` files and appending commands you would
423 configuration, by editing your ``.pdbrc`` files and appending commands you would
424 like to be executed just before entering the interactive prompt. For example:
424 like to be executed just before entering the interactive prompt. For example:
425
425
426
426
427 .. code::
427 .. code::
428
428
429 # file : ~/.pdbrc
429 # file : ~/.pdbrc
430 skip_predicates readonly True
430 skip_predicates readonly True
431 skip_predicates tbhide False
431 skip_predicates tbhide False
432
432
433 Will hide read only frames by default and show frames marked with
433 Will hide read only frames by default and show frames marked with
434 ``__tracebackhide__``.
434 ``__tracebackhide__``.
435
435
436
436
437
437
438
438
439 Thanks
439 Thanks
440 ------
440 ------
441
441
442 Many thanks to all the contributors to this release you can find all individual
442 Many thanks to all the contributors to this release you can find all individual
443 contributions to this milestone `on github <https://github.com/ipython/ipython/milestone/87>`__.
443 contributions to this milestone `on github <https://github.com/ipython/ipython/milestone/87>`__.
444
444
445 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
445 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
446 work on IPython and related libraries, in particular above mentioned
446 work on IPython and related libraries, in particular above mentioned
447 improvements to the debugger.
447 improvements to the debugger.
448
448
449
449
450
450
451
451
452 .. _version 7.23:
452 .. _version 7.23:
453
453
454 IPython 7.23 and 7.23.1
454 IPython 7.23 and 7.23.1
455 =======================
455 =======================
456
456
457
457
458 Third release of IPython for 2021, mostly containing bug fixes. A couple of not
458 Third release of IPython for 2021, mostly containing bug fixes. A couple of not
459 typical updates:
459 typical updates:
460
460
461 - We moved to GitHub actions away from Travis-CI, the transition may not be
461 - We moved to GitHub actions away from Travis-CI, the transition may not be
462 100% complete (not testing on nightly anymore), but as we ran out of
462 100% complete (not testing on nightly anymore), but as we ran out of
463 Travis-Ci hours on the IPython organisation that was a necessary step.
463 Travis-Ci hours on the IPython organisation that was a necessary step.
464 :ghpull:`12900`.
464 :ghpull:`12900`.
465
465
466 - We have a new dependency: ``matplotlib-inline``, which try to extract
466 - We have a new dependency: ``matplotlib-inline``, which try to extract
467 matplotlib inline backend specific behavior. It is available on PyPI and
467 matplotlib inline backend specific behavior. It is available on PyPI and
468 conda-forge thus should not be a problem to upgrade to this version. If you
468 conda-forge thus should not be a problem to upgrade to this version. If you
469 are a package maintainer that might be an extra dependency to package first.
469 are a package maintainer that might be an extra dependency to package first.
470 :ghpull:`12817` (IPython 7.23.1 fix a typo that made this change fail)
470 :ghpull:`12817` (IPython 7.23.1 fix a typo that made this change fail)
471
471
472 In the addition/new feature category, ``display()`` now have a ``clear=True``
472 In the addition/new feature category, ``display()`` now have a ``clear=True``
473 option to clear the display if any further outputs arrives, allowing users to
473 option to clear the display if any further outputs arrives, allowing users to
474 avoid having to use ``clear_output()`` directly. :ghpull:`12823`.
474 avoid having to use ``clear_output()`` directly. :ghpull:`12823`.
475
475
476 In bug fixes category, this release fix an issue when printing tracebacks
476 In bug fixes category, this release fix an issue when printing tracebacks
477 containing Unicode characters :ghpull:`12758`.
477 containing Unicode characters :ghpull:`12758`.
478
478
479 In code cleanup category :ghpull:`12932` remove usage of some deprecated
479 In code cleanup category :ghpull:`12932` remove usage of some deprecated
480 functionality for compatibility with Python 3.10.
480 functionality for compatibility with Python 3.10.
481
481
482
482
483
483
484 Thanks
484 Thanks
485 ------
485 ------
486
486
487 Many thanks to all the contributors to this release you can find all individual
487 Many thanks to all the contributors to this release you can find all individual
488 contributions to this milestone `on github <https://github.com/ipython/ipython/milestone/86>`__.
488 contributions to this milestone `on github <https://github.com/ipython/ipython/milestone/86>`__.
489 In particular MrMino for responding to almost all new issues, and triaging many
489 In particular MrMino for responding to almost all new issues, and triaging many
490 of the old ones, as well as takluyver, minrk, willingc for reacting quikly when
490 of the old ones, as well as takluyver, minrk, willingc for reacting quikly when
491 we ran out of CI Hours.
491 we ran out of CI Hours.
492
492
493 Thanks as well to organisations, QuantStack (martinRenou and SylvainCorlay) for
493 Thanks as well to organisations, QuantStack (martinRenou and SylvainCorlay) for
494 extracting matplotlib inline backend into its own package, and the `D. E. Shaw group
494 extracting matplotlib inline backend into its own package, and the `D. E. Shaw group
495 <https://deshaw.com/>`__ for sponsoring work on IPython and related libraries.
495 <https://deshaw.com/>`__ for sponsoring work on IPython and related libraries.
496
496
497
497
498 .. _version 7.22:
498 .. _version 7.22:
499
499
500 IPython 7.22
500 IPython 7.22
501 ============
501 ============
502
502
503 Second release of IPython for 2021, mostly containing bug fixes. Here is a quick
503 Second release of IPython for 2021, mostly containing bug fixes. Here is a quick
504 rundown of the few changes.
504 rundown of the few changes.
505
505
506 - Fix some ``sys.excepthook`` shenanigan when embedding with qt, recommended if
506 - Fix some ``sys.excepthook`` shenanigan when embedding with qt, recommended if
507 you – for example – use `napari <https://napari.org>`__. :ghpull:`12842`.
507 you – for example – use `napari <https://napari.org>`__. :ghpull:`12842`.
508 - Fix bug when using the new ipdb ``%context`` magic :ghpull:`12844`
508 - Fix bug when using the new ipdb ``%context`` magic :ghpull:`12844`
509 - Couples of deprecation cleanup :ghpull:`12868`
509 - Couples of deprecation cleanup :ghpull:`12868`
510 - Update for new dpast.com api if you use the ``%pastbin`` magic. :ghpull:`12712`
510 - Update for new dpast.com api if you use the ``%pastbin`` magic. :ghpull:`12712`
511 - Remove support for numpy before 1.16. :ghpull:`12836`
511 - Remove support for numpy before 1.16. :ghpull:`12836`
512
512
513
513
514 Thanks
514 Thanks
515 ------
515 ------
516
516
517 We have a new team member that you should see more often on the IPython
517 We have a new team member that you should see more often on the IPython
518 repository, BΕ‚aΕΌej Michalik (@MrMino) have been doing regular contributions to
518 repository, BΕ‚aΕΌej Michalik (@MrMino) have been doing regular contributions to
519 IPython, and spent time replying to many issues and guiding new users to the
519 IPython, and spent time replying to many issues and guiding new users to the
520 codebase; they now have triage permissions to the IPython repository and we'll
520 codebase; they now have triage permissions to the IPython repository and we'll
521 work toward giving them more permission in the future.
521 work toward giving them more permission in the future.
522
522
523 Many thanks to all the contributors to this release you can find all individual
523 Many thanks to all the contributors to this release you can find all individual
524 contributions to this milestone `on github <https://github.com/ipython/ipython/milestone/84>`__.
524 contributions to this milestone `on github <https://github.com/ipython/ipython/milestone/84>`__.
525
525
526 Thanks as well to organisations, QuantStack for working on debugger
526 Thanks as well to organisations, QuantStack for working on debugger
527 compatibility for Xeus_python, and the `D. E. Shaw group
527 compatibility for Xeus_python, and the `D. E. Shaw group
528 <https://deshaw.com/>`__ for sponsoring work on IPython and related libraries.
528 <https://deshaw.com/>`__ for sponsoring work on IPython and related libraries.
529
529
530 .. _version 721:
530 .. _version 721:
531
531
532 IPython 7.21
532 IPython 7.21
533 ============
533 ============
534
534
535 IPython 7.21 is the first release we have back on schedule of one release every
535 IPython 7.21 is the first release we have back on schedule of one release every
536 month; it contains a number of minor fixes and improvements, notably, the new
536 month; it contains a number of minor fixes and improvements, notably, the new
537 context command for ipdb
537 context command for ipdb
538
538
539
539
540 New "context" command in ipdb
540 New "context" command in ipdb
541 -----------------------------
541 -----------------------------
542
542
543 It is now possible to change the number of lines shown in the backtrace
543 It is now possible to change the number of lines shown in the backtrace
544 information in ipdb using "context" command. :ghpull:`12826`
544 information in ipdb using "context" command. :ghpull:`12826`
545
545
546 (thanks @MrMino, there are other improvement from them on master).
546 (thanks @MrMino, there are other improvement from them on master).
547
547
548 Other notable changes in IPython 7.21
548 Other notable changes in IPython 7.21
549 -------------------------------------
549 -------------------------------------
550
550
551 - Fix some issues on new osx-arm64 :ghpull:`12804`, :ghpull:`12807`.
551 - Fix some issues on new osx-arm64 :ghpull:`12804`, :ghpull:`12807`.
552 - Compatibility with Xeus-Python for debugger protocol, :ghpull:`12809`
552 - Compatibility with Xeus-Python for debugger protocol, :ghpull:`12809`
553 - Misc docs fixes for compatibility and uniformity with Numpydoc.
553 - Misc docs fixes for compatibility and uniformity with Numpydoc.
554 :ghpull:`12824`
554 :ghpull:`12824`
555
555
556
556
557 Thanks
557 Thanks
558 ------
558 ------
559
559
560 Many thanks to all the contributors to this release you can find all individual
560 Many thanks to all the contributors to this release you can find all individual
561 contribution to this milestone `on github <https://github.com/ipython/ipython/milestone/83>`__.
561 contribution to this milestone `on github <https://github.com/ipython/ipython/milestone/83>`__.
562
562
563
563
564 .. _version 720:
564 .. _version 720:
565
565
566 IPython 7.20
566 IPython 7.20
567 ============
567 ============
568
568
569 IPython 7.20 is the accumulation of 3 month of work on IPython, spacing between
569 IPython 7.20 is the accumulation of 3 month of work on IPython, spacing between
570 IPython release have been increased from the usual once a month for various
570 IPython release have been increased from the usual once a month for various
571 reason.
571 reason.
572
572
573 - Mainly as I'm too busy and the effectively sole maintainer, and
573 - Mainly as I'm too busy and the effectively sole maintainer, and
574 - Second because not much changes happened before mid December.
574 - Second because not much changes happened before mid December.
575
575
576 The main driver for this release was the new version of Jedi 0.18 breaking API;
576 The main driver for this release was the new version of Jedi 0.18 breaking API;
577 which was taken care of in the master branch early in 2020 but not in 7.x as I
577 which was taken care of in the master branch early in 2020 but not in 7.x as I
578 though that by now 8.0 would be out.
578 though that by now 8.0 would be out.
579
579
580 The inclusion of a resolver in pip did not help and actually made things worse.
580 The inclusion of a resolver in pip did not help and actually made things worse.
581 If usually I would have simply pinned Jedi to ``<0.18``; this is not a solution
581 If usually I would have simply pinned Jedi to ``<0.18``; this is not a solution
582 anymore as now pip is free to install Jedi 0.18, and downgrade IPython.
582 anymore as now pip is free to install Jedi 0.18, and downgrade IPython.
583
583
584 I'll do my best to keep the regular release, but as the 8.0-dev branch and 7.x
584 I'll do my best to keep the regular release, but as the 8.0-dev branch and 7.x
585 are starting to diverge this is becoming difficult in particular with my limited
585 are starting to diverge this is becoming difficult in particular with my limited
586 time, so if you have any cycles to spare I'll appreciate your help to respond to
586 time, so if you have any cycles to spare I'll appreciate your help to respond to
587 issues and pushing 8.0 forward.
587 issues and pushing 8.0 forward.
588
588
589 Here are thus some of the changes for IPython 7.20.
589 Here are thus some of the changes for IPython 7.20.
590
590
591 - Support for PyQt5 >= 5.11 :ghpull:`12715`
591 - Support for PyQt5 >= 5.11 :ghpull:`12715`
592 - ``%reset`` remove imports more agressively :ghpull:`12718`
592 - ``%reset`` remove imports more aggressively :ghpull:`12718`
593 - fix the ``%conda`` magic :ghpull:`12739`
593 - fix the ``%conda`` magic :ghpull:`12739`
594 - compatibility with Jedi 0.18, and bump minimum Jedi version. :ghpull:`12793`
594 - compatibility with Jedi 0.18, and bump minimum Jedi version. :ghpull:`12793`
595
595
596
596
597 .. _version 719:
597 .. _version 719:
598
598
599 IPython 7.19
599 IPython 7.19
600 ============
600 ============
601
601
602 IPython 7.19 accumulative two month of works, bug fixes and improvements, there
602 IPython 7.19 accumulative two month of works, bug fixes and improvements, there
603 was exceptionally no release last month.
603 was exceptionally no release last month.
604
604
605 - Fix to restore the ability to specify more than one extension using command
605 - Fix to restore the ability to specify more than one extension using command
606 line flags when using traitlets 5.0 :ghpull:`12543`
606 line flags when using traitlets 5.0 :ghpull:`12543`
607 - Docs docs formatting that make the install commands work on zsh
607 - Docs docs formatting that make the install commands work on zsh
608 :ghpull:`12587`
608 :ghpull:`12587`
609 - Always display the last frame in tracebacks even if hidden with
609 - Always display the last frame in tracebacks even if hidden with
610 ``__tracebackhide__`` :ghpull:`12601`
610 ``__tracebackhide__`` :ghpull:`12601`
611 - Avoid an issue where a callback can be registered multiple times.
611 - Avoid an issue where a callback can be registered multiple times.
612 :ghpull:`12625`
612 :ghpull:`12625`
613 - Avoid an issue in debugger mode where frames changes could be lost.
613 - Avoid an issue in debugger mode where frames changes could be lost.
614 :ghpull:`12627`
614 :ghpull:`12627`
615
615
616 - Never hide the frames that invoke a debugger, even if marked as hidden by
616 - Never hide the frames that invoke a debugger, even if marked as hidden by
617 ``__tracebackhide__`` :ghpull:`12631`
617 ``__tracebackhide__`` :ghpull:`12631`
618 - Fix calling the debugger in a recursive manner :ghpull:`12659`
618 - Fix calling the debugger in a recursive manner :ghpull:`12659`
619
619
620
620
621 A number of code changes have landed on master and we are getting close to
621 A number of code changes have landed on master and we are getting close to
622 enough new features and codebase improvement that a 8.0 start to make sens.
622 enough new features and codebase improvement that a 8.0 start to make sens.
623 For downstream packages, please start working on migrating downstream testing
623 For downstream packages, please start working on migrating downstream testing
624 away from iptest and using pytest, as nose will not work on Python 3.10 and we
624 away from iptest and using pytest, as nose will not work on Python 3.10 and we
625 will likely start removing it as a dependency for testing.
625 will likely start removing it as a dependency for testing.
626
626
627 .. _version 718:
627 .. _version 718:
628
628
629 IPython 7.18
629 IPython 7.18
630 ============
630 ============
631
631
632 IPython 7.18 is a minor release that mostly contains bugfixes.
632 IPython 7.18 is a minor release that mostly contains bugfixes.
633
633
634 - ``CRLF`` is now handled by magics my default; solving some issues due to copy
634 - ``CRLF`` is now handled by magics my default; solving some issues due to copy
635 pasting on windows. :ghpull:`12475`
635 pasting on windows. :ghpull:`12475`
636
636
637 - Requiring pexpect ``>=4.3`` as we are Python 3.7+ only and earlier version of
637 - Requiring pexpect ``>=4.3`` as we are Python 3.7+ only and earlier version of
638 pexpect will be incompatible. :ghpull:`12510`
638 pexpect will be incompatible. :ghpull:`12510`
639
639
640 - Minimum jedi version is now 0.16. :ghpull:`12488`
640 - Minimum jedi version is now 0.16. :ghpull:`12488`
641
641
642
642
643
643
644 .. _version 717:
644 .. _version 717:
645
645
646 IPython 7.17
646 IPython 7.17
647 ============
647 ============
648
648
649 IPython 7.17 brings a couple of new improvements to API and a couple of user
649 IPython 7.17 brings a couple of new improvements to API and a couple of user
650 facing changes to make the terminal experience more user friendly.
650 facing changes to make the terminal experience more user friendly.
651
651
652 :ghpull:`12407` introduces the ability to pass extra argument to the IPython
652 :ghpull:`12407` introduces the ability to pass extra argument to the IPython
653 debugger class; this is to help a new project from ``kmaork``
653 debugger class; this is to help a new project from ``kmaork``
654 (https://github.com/kmaork/madbg) to feature a fully remote debugger.
654 (https://github.com/kmaork/madbg) to feature a fully remote debugger.
655
655
656 :ghpull:`12410` finally remove support for 3.6, while the codebase is still
656 :ghpull:`12410` finally remove support for 3.6, while the codebase is still
657 technically compatible; IPython will not install on Python 3.6.
657 technically compatible; IPython will not install on Python 3.6.
658
658
659 lots of work on the debugger and hidden frames from ``@impact27`` in
659 lots of work on the debugger and hidden frames from ``@impact27`` in
660 :ghpull:`12437`, :ghpull:`12445`, :ghpull:`12460` and in particular
660 :ghpull:`12437`, :ghpull:`12445`, :ghpull:`12460` and in particular
661 :ghpull:`12453` which make the debug magic more robust at handling spaces.
661 :ghpull:`12453` which make the debug magic more robust at handling spaces.
662
662
663 Biggest API addition is code transformation which is done before code execution;
663 Biggest API addition is code transformation which is done before code execution;
664 IPython allows a number of hooks to catch non-valid Python syntax (magic, prompt
664 IPython allows a number of hooks to catch non-valid Python syntax (magic, prompt
665 stripping...etc). Transformers are usually called many time; typically:
665 stripping...etc). Transformers are usually called many time; typically:
666
666
667 - When trying to figure out whether the code is complete and valid (should we
667 - When trying to figure out whether the code is complete and valid (should we
668 insert a new line or execute ?)
668 insert a new line or execute ?)
669 - During actual code execution pass before giving the code to Python's
669 - During actual code execution pass before giving the code to Python's
670 ``exec``.
670 ``exec``.
671
671
672 This lead to issues when transformer might have had side effects; or do external
672 This lead to issues when transformer might have had side effects; or do external
673 queries. Starting with IPython 7.17 you can expect your transformer to be called
673 queries. Starting with IPython 7.17 you can expect your transformer to be called
674 less time.
674 less time.
675
675
676 Input transformers are now called only once in the execution path of
676 Input transformers are now called only once in the execution path of
677 `InteractiveShell`, allowing to register transformer that potentially have side
677 `InteractiveShell`, allowing to register transformer that potentially have side
678 effects (note that this is not recommended). Internal methods `should_run_async`, and
678 effects (note that this is not recommended). Internal methods `should_run_async`, and
679 `run_cell_async` now take a recommended optional `transformed_cell`, and
679 `run_cell_async` now take a recommended optional `transformed_cell`, and
680 `preprocessing_exc_tuple` parameters that will become mandatory at some point in
680 `preprocessing_exc_tuple` parameters that will become mandatory at some point in
681 the future; that is to say cells need to be explicitly transformed to be valid
681 the future; that is to say cells need to be explicitly transformed to be valid
682 Python syntax ahead of trying to run them. :ghpull:`12440`;
682 Python syntax ahead of trying to run them. :ghpull:`12440`;
683
683
684 ``input_transformers`` can now also have an attribute ``has_side_effects`` set
684 ``input_transformers`` can now also have an attribute ``has_side_effects`` set
685 to `True`, when this attribute is present; this will prevent the transformers
685 to `True`, when this attribute is present; this will prevent the transformers
686 from being ran when IPython is trying to guess whether the user input is
686 from being ran when IPython is trying to guess whether the user input is
687 complete. Note that this may means you will need to explicitly execute in some
687 complete. Note that this may means you will need to explicitly execute in some
688 case where your transformations are now not ran; but will not affect users with
688 case where your transformations are now not ran; but will not affect users with
689 no custom extensions.
689 no custom extensions.
690
690
691
691
692 API Changes
692 API Changes
693 -----------
693 -----------
694
694
695 Change of API and exposed objects automatically detected using `frappuccino
695 Change of API and exposed objects automatically detected using `frappuccino
696 <https://pypi.org/project/frappuccino/>`_
696 <https://pypi.org/project/frappuccino/>`_
697
697
698
698
699 The following items are new since 7.16.0::
699 The following items are new since 7.16.0::
700
700
701 + IPython.core.interactiveshell.InteractiveShell.get_local_scope(self, stack_depth)
701 + IPython.core.interactiveshell.InteractiveShell.get_local_scope(self, stack_depth)
702
702
703 The following signatures differ since 7.16.0::
703 The following signatures differ since 7.16.0::
704
704
705 - IPython.core.interactiveshell.InteractiveShell.run_cell_async(self, raw_cell, store_history=False, silent=False, shell_futures=True)
705 - IPython.core.interactiveshell.InteractiveShell.run_cell_async(self, raw_cell, store_history=False, silent=False, shell_futures=True)
706 + IPython.core.interactiveshell.InteractiveShell.run_cell_async(self, raw_cell, store_history=False, silent=False, shell_futures=True, *, transformed_cell=None, preprocessing_exc_tuple=None)
706 + IPython.core.interactiveshell.InteractiveShell.run_cell_async(self, raw_cell, store_history=False, silent=False, shell_futures=True, *, transformed_cell=None, preprocessing_exc_tuple=None)
707
707
708 - IPython.core.interactiveshell.InteractiveShell.should_run_async(self, raw_cell)
708 - IPython.core.interactiveshell.InteractiveShell.should_run_async(self, raw_cell)
709 + IPython.core.interactiveshell.InteractiveShell.should_run_async(self, raw_cell, *, transformed_cell=None, preprocessing_exc_tuple=None)
709 + IPython.core.interactiveshell.InteractiveShell.should_run_async(self, raw_cell, *, transformed_cell=None, preprocessing_exc_tuple=None)
710
710
711 - IPython.terminal.debugger.TerminalPdb.pt_init(self)
711 - IPython.terminal.debugger.TerminalPdb.pt_init(self)
712 + IPython.terminal.debugger.TerminalPdb.pt_init(self, pt_session_options=None)
712 + IPython.terminal.debugger.TerminalPdb.pt_init(self, pt_session_options=None)
713
713
714 This method was added::
714 This method was added::
715
715
716 + IPython.core.interactiveshell.InteractiveShell.get_local_scope
716 + IPython.core.interactiveshell.InteractiveShell.get_local_scope
717
717
718 Which is now also present on subclasses::
718 Which is now also present on subclasses::
719
719
720 + IPython.terminal.embed.InteractiveShellEmbed.get_local_scope
720 + IPython.terminal.embed.InteractiveShellEmbed.get_local_scope
721 + IPython.terminal.interactiveshell.TerminalInteractiveShell.get_local_scope
721 + IPython.terminal.interactiveshell.TerminalInteractiveShell.get_local_scope
722
722
723
723
724 .. _version 716:
724 .. _version 716:
725
725
726 IPython 7.16.1, 7.16.2
726 IPython 7.16.1, 7.16.2
727 ======================
727 ======================
728
728
729 IPython 7.16.1 was release immediately after 7.16.0 to fix a conda packaging issue.
729 IPython 7.16.1 was release immediately after 7.16.0 to fix a conda packaging issue.
730 The source is identical to 7.16.0 but the file permissions in the tar are different.
730 The source is identical to 7.16.0 but the file permissions in the tar are different.
731
731
732 IPython 7.16.2 pins jedi dependency to "<=0.17.2" which should prevent some
732 IPython 7.16.2 pins jedi dependency to "<=0.17.2" which should prevent some
733 issues for users still on python 3.6. This may not be sufficient as pip may
733 issues for users still on python 3.6. This may not be sufficient as pip may
734 still allow to downgrade IPython.
734 still allow to downgrade IPython.
735
735
736 Compatibility with Jedi > 0.17.2 was not added as this would have meant bumping
736 Compatibility with Jedi > 0.17.2 was not added as this would have meant bumping
737 the minimal version to >0.16.
737 the minimal version to >0.16.
738
738
739 IPython 7.16
739 IPython 7.16
740 ============
740 ============
741
741
742
742
743 The default traceback mode will now skip frames that are marked with
743 The default traceback mode will now skip frames that are marked with
744 ``__tracebackhide__ = True`` and show how many traceback frames have been
744 ``__tracebackhide__ = True`` and show how many traceback frames have been
745 skipped. This can be toggled by using :magic:`xmode` with the ``--show`` or
745 skipped. This can be toggled by using :magic:`xmode` with the ``--show`` or
746 ``--hide`` attribute. It will have no effect on non verbose traceback modes.
746 ``--hide`` attribute. It will have no effect on non verbose traceback modes.
747
747
748 The ipython debugger also now understands ``__tracebackhide__`` as well and will
748 The ipython debugger also now understands ``__tracebackhide__`` as well and will
749 skip hidden frames when displaying. Movement up and down the stack will skip the
749 skip hidden frames when displaying. Movement up and down the stack will skip the
750 hidden frames and will show how many frames were hidden. Internal IPython frames
750 hidden frames and will show how many frames were hidden. Internal IPython frames
751 are also now hidden by default. The behavior can be changed with the
751 are also now hidden by default. The behavior can be changed with the
752 ``skip_hidden`` while in the debugger, command and accepts "yes", "no", "true"
752 ``skip_hidden`` while in the debugger, command and accepts "yes", "no", "true"
753 and "false" case insensitive parameters.
753 and "false" case insensitive parameters.
754
754
755
755
756 Misc Noticeable changes:
756 Misc Noticeable changes:
757 ------------------------
757 ------------------------
758
758
759 - Exceptions are now (re)raised when running notebooks via the :magic:`%run`, helping to catch issues in workflows and
759 - Exceptions are now (re)raised when running notebooks via the :magic:`%run`, helping to catch issues in workflows and
760 pipelines. :ghpull:`12301`
760 pipelines. :ghpull:`12301`
761 - Fix inputhook for qt 5.15.0 :ghpull:`12355`
761 - Fix inputhook for qt 5.15.0 :ghpull:`12355`
762 - Fix wx inputhook :ghpull:`12375`
762 - Fix wx inputhook :ghpull:`12375`
763 - Add handling for malformed pathext env var (Windows) :ghpull:`12367`
763 - Add handling for malformed pathext env var (Windows) :ghpull:`12367`
764 - use $SHELL in system_piped :ghpull:`12360` for uniform behavior with
764 - use $SHELL in system_piped :ghpull:`12360` for uniform behavior with
765 ipykernel.
765 ipykernel.
766
766
767 Reproducible Build
767 Reproducible Build
768 ------------------
768 ------------------
769
769
770 IPython 7.15 reproducible build did not work, so we try again this month
770 IPython 7.15 reproducible build did not work, so we try again this month
771 :ghpull:`12358`.
771 :ghpull:`12358`.
772
772
773
773
774 API Changes
774 API Changes
775 -----------
775 -----------
776
776
777 Change of API and exposed objects automatically detected using `frappuccino
777 Change of API and exposed objects automatically detected using `frappuccino
778 <https://pypi.org/project/frappuccino/>`_ (still in beta):
778 <https://pypi.org/project/frappuccino/>`_ (still in beta):
779
779
780
780
781 The following items are new and mostly related to understanding ``__tracebackhide__``::
781 The following items are new and mostly related to understanding ``__tracebackhide__``::
782
782
783 + IPython.core.debugger.Pdb.do_down(self, arg)
783 + IPython.core.debugger.Pdb.do_down(self, arg)
784 + IPython.core.debugger.Pdb.do_skip_hidden(self, arg)
784 + IPython.core.debugger.Pdb.do_skip_hidden(self, arg)
785 + IPython.core.debugger.Pdb.do_up(self, arg)
785 + IPython.core.debugger.Pdb.do_up(self, arg)
786 + IPython.core.debugger.Pdb.hidden_frames(self, stack)
786 + IPython.core.debugger.Pdb.hidden_frames(self, stack)
787 + IPython.core.debugger.Pdb.stop_here(self, frame)
787 + IPython.core.debugger.Pdb.stop_here(self, frame)
788
788
789
789
790 The following items have been removed::
790 The following items have been removed::
791
791
792 - IPython.core.debugger.Pdb.new_do_down
792 - IPython.core.debugger.Pdb.new_do_down
793 - IPython.core.debugger.Pdb.new_do_up
793 - IPython.core.debugger.Pdb.new_do_up
794
794
795 Those were implementation details.
795 Those were implementation details.
796
796
797
797
798 .. _version 715:
798 .. _version 715:
799
799
800 IPython 7.15
800 IPython 7.15
801 ============
801 ============
802
802
803 IPython 7.15 brings a number of bug fixes and user facing improvements.
803 IPython 7.15 brings a number of bug fixes and user facing improvements.
804
804
805 Misc Noticeable changes:
805 Misc Noticeable changes:
806 ------------------------
806 ------------------------
807
807
808 - Long completion name have better elision in terminal :ghpull:`12284`
808 - Long completion name have better elision in terminal :ghpull:`12284`
809 - I've started to test on Python 3.9 :ghpull:`12307` and fix some errors.
809 - I've started to test on Python 3.9 :ghpull:`12307` and fix some errors.
810 - Hi DPI scaling of figures when using qt eventloop :ghpull:`12314`
810 - Hi DPI scaling of figures when using qt eventloop :ghpull:`12314`
811 - Document the ability to have systemwide configuration for IPython.
811 - Document the ability to have systemwide configuration for IPython.
812 :ghpull:`12328`
812 :ghpull:`12328`
813 - Fix issues with input autoformatting :ghpull:`12336`
813 - Fix issues with input autoformatting :ghpull:`12336`
814 - ``IPython.core.debugger.Pdb`` is now interruptible (:ghpull:`12168`, in 7.14
814 - ``IPython.core.debugger.Pdb`` is now interruptible (:ghpull:`12168`, in 7.14
815 but forgotten in release notes)
815 but forgotten in release notes)
816 - Video HTML attributes (:ghpull:`12212`, in 7.14 but forgotten in release
816 - Video HTML attributes (:ghpull:`12212`, in 7.14 but forgotten in release
817 notes)
817 notes)
818
818
819 Reproducible Build
819 Reproducible Build
820 ------------------
820 ------------------
821
821
822 Starting with IPython 7.15, I am attempting to provide reproducible builds,
822 Starting with IPython 7.15, I am attempting to provide reproducible builds,
823 that is to say you should be able from the source tree to generate an sdist
823 that is to say you should be able from the source tree to generate an sdist
824 and wheel that are identical byte for byte with the publish version on PyPI.
824 and wheel that are identical byte for byte with the publish version on PyPI.
825
825
826 I've only tested on a couple of machines so far and the process is relatively
826 I've only tested on a couple of machines so far and the process is relatively
827 straightforward, so this mean that IPython not only have a deterministic build
827 straightforward, so this mean that IPython not only have a deterministic build
828 process, but also I have either removed, or put under control all effects of
828 process, but also I have either removed, or put under control all effects of
829 the build environments on the final artifact. I encourage you to attempt the
829 the build environments on the final artifact. I encourage you to attempt the
830 build process on your machine as documented in :ref:`core_developer_guide`
830 build process on your machine as documented in :ref:`core_developer_guide`
831 and let me know if you do not obtain an identical artifact.
831 and let me know if you do not obtain an identical artifact.
832
832
833 While reproducible builds is critical to check that the supply chain of (open
833 While reproducible builds is critical to check that the supply chain of (open
834 source) software has not been compromised, it can also help to speedup many
834 source) software has not been compromised, it can also help to speedup many
835 of the build processes in large environment (conda, apt...) by allowing
835 of the build processes in large environment (conda, apt...) by allowing
836 better caching of intermediate build steps.
836 better caching of intermediate build steps.
837
837
838 Learn more on `<https://reproducible-builds.org/>`_. `Reflections on trusting
838 Learn more on `<https://reproducible-builds.org/>`_. `Reflections on trusting
839 trust <https://dl.acm.org/doi/10.1145/358198.358210>`_ is also one of the
839 trust <https://dl.acm.org/doi/10.1145/358198.358210>`_ is also one of the
840 cornerstone and recommended reads on this subject.
840 cornerstone and recommended reads on this subject.
841
841
842 .. note::
842 .. note::
843
843
844 The build commit from which the sdist is generated is also `signed
844 The build commit from which the sdist is generated is also `signed
845 <https://en.wikipedia.org/wiki/Digital_signature>`_, so you should be able to
845 <https://en.wikipedia.org/wiki/Digital_signature>`_, so you should be able to
846 check it has not been compromised, and the git repository is a `merkle-tree
846 check it has not been compromised, and the git repository is a `merkle-tree
847 <https://en.wikipedia.org/wiki/Merkle_tree>`_, you can check the consistency
847 <https://en.wikipedia.org/wiki/Merkle_tree>`_, you can check the consistency
848 with `git-fsck <https://git-scm.com/docs/git-fsck>`_ which you likely `want
848 with `git-fsck <https://git-scm.com/docs/git-fsck>`_ which you likely `want
849 to enable by default
849 to enable by default
850 <https://gist.github.com/mbbx6spp/14b86437e794bffb4120>`_.
850 <https://gist.github.com/mbbx6spp/14b86437e794bffb4120>`_.
851
851
852 NEP29: Last version to support Python 3.6
852 NEP29: Last version to support Python 3.6
853 -----------------------------------------
853 -----------------------------------------
854
854
855 IPython 7.15 will be the Last IPython version to officially support Python
855 IPython 7.15 will be the Last IPython version to officially support Python
856 3.6, as stated by `NumPy Enhancement Proposal 29
856 3.6, as stated by `NumPy Enhancement Proposal 29
857 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`_. Starting with
857 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`_. Starting with
858 next minor version of IPython I may stop testing on Python 3.6 and may stop
858 next minor version of IPython I may stop testing on Python 3.6 and may stop
859 publishing release artifacts that install on Python 3.6
859 publishing release artifacts that install on Python 3.6
860
860
861 Highlighted features
861 Highlighted features
862 --------------------
862 --------------------
863
863
864 Highlighted features are not new, but seem to not be widely known, this
864 Highlighted features are not new, but seem to not be widely known, this
865 section will help you discover in more narrative form what you can do with
865 section will help you discover in more narrative form what you can do with
866 IPython.
866 IPython.
867
867
868 Increase Tab Completion Menu Height
868 Increase Tab Completion Menu Height
869 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
869 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
870
870
871 In terminal IPython it is possible to increase the hight of the tab-completion
871 In terminal IPython it is possible to increase the height of the tab-completion
872 menu. To do so set the value of
872 menu. To do so set the value of
873 :configtrait:`TerminalInteractiveShell.space_for_menu`, this will reserve more
873 :configtrait:`TerminalInteractiveShell.space_for_menu`, this will reserve more
874 space at the bottom of the screen for various kind of menus in IPython including
874 space at the bottom of the screen for various kind of menus in IPython including
875 tab completion and searching in history.
875 tab completion and searching in history.
876
876
877 Autoformat Code in the terminal
877 Autoformat Code in the terminal
878 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
878 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
879
879
880 If you have a preferred code formatter, you can configure IPython to
880 If you have a preferred code formatter, you can configure IPython to
881 reformat your code. Set the value of
881 reformat your code. Set the value of
882 :configtrait:`TerminalInteractiveShell.autoformatter` to for example ``'black'``
882 :configtrait:`TerminalInteractiveShell.autoformatter` to for example ``'black'``
883 and IPython will auto format your code when possible.
883 and IPython will auto format your code when possible.
884
884
885
885
886 .. _version 714:
886 .. _version 714:
887
887
888 IPython 7.14
888 IPython 7.14
889 ============
889 ============
890
890
891 IPython 7.14 is a minor release that fix a couple of bugs and prepare
891 IPython 7.14 is a minor release that fix a couple of bugs and prepare
892 compatibility with new or future versions of some libraries.
892 compatibility with new or future versions of some libraries.
893
893
894 Important changes:
894 Important changes:
895 ------------------
895 ------------------
896
896
897 - Fix compatibility with Sphinx 3+ :ghpull:`12235`
897 - Fix compatibility with Sphinx 3+ :ghpull:`12235`
898 - Remove deprecated matplotlib parameter usage, compatibility with matplotlib
898 - Remove deprecated matplotlib parameter usage, compatibility with matplotlib
899 3.3+ :`122250`
899 3.3+ :`122250`
900
900
901 Misc Changes
901 Misc Changes
902 ------------
902 ------------
903
903
904 - set ``.py`` extension when editing current buffer in vi/emacs. :ghpull:`12167`
904 - set ``.py`` extension when editing current buffer in vi/emacs. :ghpull:`12167`
905 - support for unicode identifiers in ``?``/``??`` :ghpull:`12208`
905 - support for unicode identifiers in ``?``/``??`` :ghpull:`12208`
906 - add extra options to the ``Video`` Rich objects :ghpull:`12212`
906 - add extra options to the ``Video`` Rich objects :ghpull:`12212`
907 - add pretty-printing to ``SimpleNamespace`` :ghpull:`12230`
907 - add pretty-printing to ``SimpleNamespace`` :ghpull:`12230`
908
908
909 IPython.core.debugger.Pdb is now interruptible
909 IPython.core.debugger.Pdb is now interruptible
910 ----------------------------------------------
910 ----------------------------------------------
911
911
912 A ``KeyboardInterrupt`` will now interrupt IPython's extended debugger, in order to make Jupyter able to interrupt it. (:ghpull:`12168`)
912 A ``KeyboardInterrupt`` will now interrupt IPython's extended debugger, in order to make Jupyter able to interrupt it. (:ghpull:`12168`)
913
913
914 Video HTML attributes
914 Video HTML attributes
915 ---------------------
915 ---------------------
916
916
917 Add an option to `IPython.display.Video` to change the attributes of the HTML display of the video (:ghpull:`12212`)
917 Add an option to `IPython.display.Video` to change the attributes of the HTML display of the video (:ghpull:`12212`)
918
918
919
919
920 Pending deprecated imports
920 Pending deprecated imports
921 --------------------------
921 --------------------------
922
922
923 Many object present in ``IPython.core.display`` are there for internal use only,
923 Many object present in ``IPython.core.display`` are there for internal use only,
924 and should already been imported from ``IPython.display`` by users and external
924 and should already been imported from ``IPython.display`` by users and external
925 libraries. Trying to import those from ``IPython.core.display`` is still possible
925 libraries. Trying to import those from ``IPython.core.display`` is still possible
926 but will trigger a
926 but will trigger a
927 deprecation warning in later versions of IPython and will become errors in the
927 deprecation warning in later versions of IPython and will become errors in the
928 future.
928 future.
929
929
930 This will simplify compatibility with other Python kernels (like Xeus-Python),
930 This will simplify compatibility with other Python kernels (like Xeus-Python),
931 and simplify code base.
931 and simplify code base.
932
932
933
933
934
934
935
935
936 .. _version 713:
936 .. _version 713:
937
937
938 IPython 7.13
938 IPython 7.13
939 ============
939 ============
940
940
941 IPython 7.13 is the final release of the 7.x branch since master is diverging
941 IPython 7.13 is the final release of the 7.x branch since master is diverging
942 toward an 8.0. Exiting new features have already been merged in 8.0 and will
942 toward an 8.0. Exiting new features have already been merged in 8.0 and will
943 not be available on the 7.x branch. All the changes below have been backported
943 not be available on the 7.x branch. All the changes below have been backported
944 from the master branch.
944 from the master branch.
945
945
946
946
947 - Fix inability to run PDB when inside an event loop :ghpull:`12141`
947 - Fix inability to run PDB when inside an event loop :ghpull:`12141`
948 - Fix ability to interrupt some processes on windows :ghpull:`12137`
948 - Fix ability to interrupt some processes on windows :ghpull:`12137`
949 - Fix debugger shortcuts :ghpull:`12132`
949 - Fix debugger shortcuts :ghpull:`12132`
950 - improve tab completion when inside a string by removing irrelevant elements :ghpull:`12128`
950 - improve tab completion when inside a string by removing irrelevant elements :ghpull:`12128`
951 - Fix display of filename tab completion when the path is long :ghpull:`12122`
951 - Fix display of filename tab completion when the path is long :ghpull:`12122`
952 - Many removal of Python 2 specific code path :ghpull:`12110`
952 - Many removal of Python 2 specific code path :ghpull:`12110`
953 - displaying wav files do not require NumPy anymore, and is 5x to 30x faster :ghpull:`12113`
953 - displaying wav files do not require NumPy anymore, and is 5x to 30x faster :ghpull:`12113`
954
954
955 See the list of all closed issues and pull request on `github
955 See the list of all closed issues and pull request on `github
956 <https://github.com/ipython/ipython/pulls?q=is%3Aclosed+milestone%3A7.13>`_.
956 <https://github.com/ipython/ipython/pulls?q=is%3Aclosed+milestone%3A7.13>`_.
957
957
958 .. _version 712:
958 .. _version 712:
959
959
960 IPython 7.12
960 IPython 7.12
961 ============
961 ============
962
962
963 IPython 7.12 is a minor update that mostly brings code cleanup, removal of
963 IPython 7.12 is a minor update that mostly brings code cleanup, removal of
964 longtime deprecated function and a couple update to documentation cleanup as well.
964 longtime deprecated function and a couple update to documentation cleanup as well.
965
965
966 Notable changes are the following:
966 Notable changes are the following:
967
967
968 - Exit non-zero when ipython is given a file path to run that doesn't exist :ghpull:`12074`
968 - Exit non-zero when ipython is given a file path to run that doesn't exist :ghpull:`12074`
969 - Test PR on ARM64 with Travis-CI :ghpull:`12073`
969 - Test PR on ARM64 with Travis-CI :ghpull:`12073`
970 - Update CI to work with latest Pytest :ghpull:`12086`
970 - Update CI to work with latest Pytest :ghpull:`12086`
971 - Add infrastructure to run ipykernel eventloop via trio :ghpull:`12097`
971 - Add infrastructure to run ipykernel eventloop via trio :ghpull:`12097`
972 - Support git blame ignore revs :ghpull:`12091`
972 - Support git blame ignore revs :ghpull:`12091`
973 - Start multi-line ``__repr__`` s on their own line :ghpull:`12099`
973 - Start multi-line ``__repr__`` s on their own line :ghpull:`12099`
974
974
975 .. _version 7111:
975 .. _version 7111:
976
976
977 IPython 7.11.1
977 IPython 7.11.1
978 ==============
978 ==============
979
979
980 A couple of deprecated functions (no-op) have been reintroduces in py3compat as
980 A couple of deprecated functions (no-op) have been reintroduces in py3compat as
981 Cython was still relying on them, and will be removed in a couple of versions.
981 Cython was still relying on them, and will be removed in a couple of versions.
982
982
983 .. _version 711:
983 .. _version 711:
984
984
985 IPython 7.11
985 IPython 7.11
986 ============
986 ============
987
987
988 IPython 7.11 received a couple of compatibility fixes and code cleanup.
988 IPython 7.11 received a couple of compatibility fixes and code cleanup.
989
989
990 A number of function in the ``py3compat`` have been removed; a number of types
990 A number of function in the ``py3compat`` have been removed; a number of types
991 in the IPython code base are now non-ambiguous and now always ``unicode``
991 in the IPython code base are now non-ambiguous and now always ``unicode``
992 instead of ``Union[Unicode,bytes]``; many of the relevant code path have thus
992 instead of ``Union[Unicode,bytes]``; many of the relevant code path have thus
993 been simplified/cleaned and types annotation added.
993 been simplified/cleaned and types annotation added.
994
994
995 IPython support several verbosity level from exceptions. ``xmode plain`` now
995 IPython support several verbosity level from exceptions. ``xmode plain`` now
996 support chained exceptions. :ghpull:`11999`
996 support chained exceptions. :ghpull:`11999`
997
997
998 We are starting to remove ``shell=True`` in some usages of subprocess. While not directly
998 We are starting to remove ``shell=True`` in some usages of subprocess. While not directly
999 a security issue (as IPython is made to run arbitrary code anyway) it is not good
999 a security issue (as IPython is made to run arbitrary code anyway) it is not good
1000 practice and we'd like to show the example. :ghissue:`12023`. This discussion
1000 practice and we'd like to show the example. :ghissue:`12023`. This discussion
1001 was started by ``@mschwager`` thanks to a new auditing tool they are working on
1001 was started by ``@mschwager`` thanks to a new auditing tool they are working on
1002 with duo-labs (`dlint <https://github.com/duo-labs/dlint>`_).
1002 with duo-labs (`dlint <https://github.com/duo-labs/dlint>`_).
1003
1003
1004 Work around some bugs in Python 3.9 tokenizer :ghpull:`12057`
1004 Work around some bugs in Python 3.9 tokenizer :ghpull:`12057`
1005
1005
1006 IPython will now print its version after a crash. :ghpull:`11986`
1006 IPython will now print its version after a crash. :ghpull:`11986`
1007
1007
1008 This is likely the last release from the 7.x series that will see new feature.
1008 This is likely the last release from the 7.x series that will see new feature.
1009 The master branch will soon accept large code changes and thrilling new
1009 The master branch will soon accept large code changes and thrilling new
1010 features; the 7.x branch will only start to accept critical bug fixes, and
1010 features; the 7.x branch will only start to accept critical bug fixes, and
1011 update dependencies.
1011 update dependencies.
1012
1012
1013 .. _version 7102:
1013 .. _version 7102:
1014
1014
1015 IPython 7.10.2
1015 IPython 7.10.2
1016 ==============
1016 ==============
1017
1017
1018 IPython 7.10.2 fix a couple of extra incompatibility between IPython, ipdb,
1018 IPython 7.10.2 fix a couple of extra incompatibility between IPython, ipdb,
1019 asyncio and Prompt Toolkit 3.
1019 asyncio and Prompt Toolkit 3.
1020
1020
1021 .. _version 7101:
1021 .. _version 7101:
1022
1022
1023 IPython 7.10.1
1023 IPython 7.10.1
1024 ==============
1024 ==============
1025
1025
1026 IPython 7.10.1 fix a couple of incompatibilities with Prompt toolkit 3 (please
1026 IPython 7.10.1 fix a couple of incompatibilities with Prompt toolkit 3 (please
1027 update Prompt toolkit to 3.0.2 at least), and fixes some interaction with
1027 update Prompt toolkit to 3.0.2 at least), and fixes some interaction with
1028 headless IPython.
1028 headless IPython.
1029
1029
1030 .. _version 7100:
1030 .. _version 7100:
1031
1031
1032 IPython 7.10.0
1032 IPython 7.10.0
1033 ==============
1033 ==============
1034
1034
1035 IPython 7.10 is the first double digit minor release in the last decade, and
1035 IPython 7.10 is the first double digit minor release in the last decade, and
1036 first since the release of IPython 1.0, previous double digit minor release was
1036 first since the release of IPython 1.0, previous double digit minor release was
1037 in August 2009.
1037 in August 2009.
1038
1038
1039 We've been trying to give you regular release on the last Friday of every month
1039 We've been trying to give you regular release on the last Friday of every month
1040 for a guaranty of rapid access to bug fixes and new features.
1040 for a guaranty of rapid access to bug fixes and new features.
1041
1041
1042 Unlike the previous first few releases that have seen only a couple of code
1042 Unlike the previous first few releases that have seen only a couple of code
1043 changes, 7.10 bring a number of changes, new features and bugfixes.
1043 changes, 7.10 bring a number of changes, new features and bugfixes.
1044
1044
1045 Stop Support for Python 3.5 – Adopt NEP 29
1045 Stop Support for Python 3.5 – Adopt NEP 29
1046 ------------------------------------------
1046 ------------------------------------------
1047
1047
1048 IPython has decided to follow the informational `NEP 29
1048 IPython has decided to follow the informational `NEP 29
1049 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`_ which layout a clear
1049 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`_ which layout a clear
1050 policy as to which version of (C)Python and NumPy are supported.
1050 policy as to which version of (C)Python and NumPy are supported.
1051
1051
1052 We thus dropped support for Python 3.5, and cleaned up a number of code path
1052 We thus dropped support for Python 3.5, and cleaned up a number of code path
1053 that were Python-version dependant. If you are on 3.5 or earlier pip should
1053 that were Python-version dependent. If you are on 3.5 or earlier pip should
1054 automatically give you the latest compatible version of IPython so you do not
1054 automatically give you the latest compatible version of IPython so you do not
1055 need to pin to a given version.
1055 need to pin to a given version.
1056
1056
1057 Support for Prompt Toolkit 3.0
1057 Support for Prompt Toolkit 3.0
1058 ------------------------------
1058 ------------------------------
1059
1059
1060 Prompt Toolkit 3.0 was release a week before IPython 7.10 and introduces a few
1060 Prompt Toolkit 3.0 was release a week before IPython 7.10 and introduces a few
1061 breaking changes. We believe IPython 7.10 should be compatible with both Prompt
1061 breaking changes. We believe IPython 7.10 should be compatible with both Prompt
1062 Toolkit 2.x and 3.x, though it has not been extensively tested with 3.x so
1062 Toolkit 2.x and 3.x, though it has not been extensively tested with 3.x so
1063 please report any issues.
1063 please report any issues.
1064
1064
1065
1065
1066 Prompt Rendering Performance improvements
1066 Prompt Rendering Performance improvements
1067 -----------------------------------------
1067 -----------------------------------------
1068
1068
1069 Pull Request :ghpull:`11933` introduced an optimisation in the prompt rendering
1069 Pull Request :ghpull:`11933` introduced an optimisation in the prompt rendering
1070 logic that should decrease the resource usage of IPython when using the
1070 logic that should decrease the resource usage of IPython when using the
1071 _default_ configuration but could potentially introduce a regression of
1071 _default_ configuration but could potentially introduce a regression of
1072 functionalities if you are using a custom prompt.
1072 functionalities if you are using a custom prompt.
1073
1073
1074 We know assume if you haven't changed the default keybindings that the prompt
1074 We know assume if you haven't changed the default keybindings that the prompt
1075 **will not change** during the duration of your input – which is for example
1075 **will not change** during the duration of your input – which is for example
1076 not true when using vi insert mode that switches between `[ins]` and `[nor]`
1076 not true when using vi insert mode that switches between `[ins]` and `[nor]`
1077 for the current mode.
1077 for the current mode.
1078
1078
1079 If you are experiencing any issue let us know.
1079 If you are experiencing any issue let us know.
1080
1080
1081 Code autoformatting
1081 Code autoformatting
1082 -------------------
1082 -------------------
1083
1083
1084 The IPython terminal can now auto format your code just before entering a new
1084 The IPython terminal can now auto format your code just before entering a new
1085 line or executing a command. To do so use the
1085 line or executing a command. To do so use the
1086 ``--TerminalInteractiveShell.autoformatter`` option and set it to ``'black'``;
1086 ``--TerminalInteractiveShell.autoformatter`` option and set it to ``'black'``;
1087 if black is installed IPython will use black to format your code when possible.
1087 if black is installed IPython will use black to format your code when possible.
1088
1088
1089 IPython cannot always properly format your code; in particular it will
1089 IPython cannot always properly format your code; in particular it will
1090 auto formatting with *black* will only work if:
1090 auto formatting with *black* will only work if:
1091
1091
1092 - Your code does not contains magics or special python syntax.
1092 - Your code does not contains magics or special python syntax.
1093
1093
1094 - There is no code after your cursor.
1094 - There is no code after your cursor.
1095
1095
1096 The Black API is also still in motion; so this may not work with all versions of
1096 The Black API is also still in motion; so this may not work with all versions of
1097 black.
1097 black.
1098
1098
1099 It should be possible to register custom formatter, though the API is till in
1099 It should be possible to register custom formatter, though the API is till in
1100 flux.
1100 flux.
1101
1101
1102 Arbitrary Mimetypes Handing in Terminal (Aka inline images in terminal)
1102 Arbitrary Mimetypes Handing in Terminal (Aka inline images in terminal)
1103 -----------------------------------------------------------------------
1103 -----------------------------------------------------------------------
1104
1104
1105 When using IPython terminal it is now possible to register function to handle
1105 When using IPython terminal it is now possible to register function to handle
1106 arbitrary mimetypes. While rendering non-text based representation was possible in
1106 arbitrary mimetypes. While rendering non-text based representation was possible in
1107 many jupyter frontend; it was not possible in terminal IPython, as usually
1107 many jupyter frontend; it was not possible in terminal IPython, as usually
1108 terminal are limited to displaying text. As many terminal these days provide
1108 terminal are limited to displaying text. As many terminal these days provide
1109 escape sequences to display non-text; bringing this loved feature to IPython CLI
1109 escape sequences to display non-text; bringing this loved feature to IPython CLI
1110 made a lot of sens. This functionality will not only allow inline images; but
1110 made a lot of sens. This functionality will not only allow inline images; but
1111 allow opening of external program; for example ``mplayer`` to "display" sound
1111 allow opening of external program; for example ``mplayer`` to "display" sound
1112 files.
1112 files.
1113
1113
1114 So far only the hooks necessary for this are in place, but no default mime
1114 So far only the hooks necessary for this are in place, but no default mime
1115 renderers added; so inline images will only be available via extensions. We will
1115 renderers added; so inline images will only be available via extensions. We will
1116 progressively enable these features by default in the next few releases, and
1116 progressively enable these features by default in the next few releases, and
1117 contribution is welcomed.
1117 contribution is welcomed.
1118
1118
1119 We welcome any feedback on the API. See :ref:`shell_mimerenderer` for more
1119 We welcome any feedback on the API. See :ref:`shell_mimerenderer` for more
1120 informations.
1120 information.
1121
1121
1122 This is originally based on work form in :ghpull:`10610` from @stephanh42
1122 This is originally based on work form in :ghpull:`10610` from @stephanh42
1123 started over two years ago, and still a lot need to be done.
1123 started over two years ago, and still a lot need to be done.
1124
1124
1125 MISC
1125 MISC
1126 ----
1126 ----
1127
1127
1128 - Completions can define their own ordering :ghpull:`11855`
1128 - Completions can define their own ordering :ghpull:`11855`
1129 - Enable Plotting in the same cell than the one that import matplotlib
1129 - Enable Plotting in the same cell than the one that import matplotlib
1130 :ghpull:`11916`
1130 :ghpull:`11916`
1131 - Allow to store and restore multiple variables at once :ghpull:`11930`
1131 - Allow to store and restore multiple variables at once :ghpull:`11930`
1132
1132
1133 You can see `all pull-requests <https://github.com/ipython/ipython/pulls?q=is%3Apr+milestone%3A7.10+is%3Aclosed>`_ for this release.
1133 You can see `all pull-requests <https://github.com/ipython/ipython/pulls?q=is%3Apr+milestone%3A7.10+is%3Aclosed>`_ for this release.
1134
1134
1135 API Changes
1135 API Changes
1136 -----------
1136 -----------
1137
1137
1138 Change of API and exposed objects automatically detected using `frappuccino <https://pypi.org/project/frappuccino/>`_ (still in beta):
1138 Change of API and exposed objects automatically detected using `frappuccino <https://pypi.org/project/frappuccino/>`_ (still in beta):
1139
1139
1140 The following items are new in IPython 7.10::
1140 The following items are new in IPython 7.10::
1141
1141
1142 + IPython.terminal.shortcuts.reformat_text_before_cursor(buffer, document, shell)
1142 + IPython.terminal.shortcuts.reformat_text_before_cursor(buffer, document, shell)
1143 + IPython.terminal.interactiveshell.PTK3
1143 + IPython.terminal.interactiveshell.PTK3
1144 + IPython.terminal.interactiveshell.black_reformat_handler(text_before_cursor)
1144 + IPython.terminal.interactiveshell.black_reformat_handler(text_before_cursor)
1145 + IPython.terminal.prompts.RichPromptDisplayHook.write_format_data(self, format_dict, md_dict='None')
1145 + IPython.terminal.prompts.RichPromptDisplayHook.write_format_data(self, format_dict, md_dict='None')
1146
1146
1147 The following items have been removed in 7.10::
1147 The following items have been removed in 7.10::
1148
1148
1149 - IPython.lib.pretty.DICT_IS_ORDERED
1149 - IPython.lib.pretty.DICT_IS_ORDERED
1150
1150
1151 The following signatures differ between versions::
1151 The following signatures differ between versions::
1152
1152
1153 - IPython.extensions.storemagic.restore_aliases(ip)
1153 - IPython.extensions.storemagic.restore_aliases(ip)
1154 + IPython.extensions.storemagic.restore_aliases(ip, alias='None')
1154 + IPython.extensions.storemagic.restore_aliases(ip, alias='None')
1155
1155
1156 Special Thanks
1156 Special Thanks
1157 --------------
1157 --------------
1158
1158
1159 - @stephanh42 who started the work on inline images in terminal 2 years ago
1159 - @stephanh42 who started the work on inline images in terminal 2 years ago
1160 - @augustogoulart who spent a lot of time triaging issues and responding to
1160 - @augustogoulart who spent a lot of time triaging issues and responding to
1161 users.
1161 users.
1162 - @con-f-use who is my (@Carreau) first sponsor on GitHub, as a reminder if you
1162 - @con-f-use who is my (@Carreau) first sponsor on GitHub, as a reminder if you
1163 like IPython, Jupyter and many other library of the SciPy stack you can
1163 like IPython, Jupyter and many other library of the SciPy stack you can
1164 donate to numfocus.org non profit
1164 donate to numfocus.org non profit
1165
1165
1166 .. _version 790:
1166 .. _version 790:
1167
1167
1168 IPython 7.9.0
1168 IPython 7.9.0
1169 =============
1169 =============
1170
1170
1171 IPython 7.9 is a small release with a couple of improvement and bug fixes.
1171 IPython 7.9 is a small release with a couple of improvement and bug fixes.
1172
1172
1173 - Xterm terminal title should be restored on exit :ghpull:`11910`
1173 - Xterm terminal title should be restored on exit :ghpull:`11910`
1174 - special variables ``_``,``__``, ``___`` are not set anymore when cache size
1174 - special variables ``_``,``__``, ``___`` are not set anymore when cache size
1175 is 0 or less. :ghpull:`11877`
1175 is 0 or less. :ghpull:`11877`
1176 - Autoreload should have regained some speed by using a new heuristic logic to
1176 - Autoreload should have regained some speed by using a new heuristic logic to
1177 find all objects needing reload. This should avoid large objects traversal
1177 find all objects needing reload. This should avoid large objects traversal
1178 like pandas dataframes. :ghpull:`11876`
1178 like pandas dataframes. :ghpull:`11876`
1179 - Get ready for Python 4. :ghpull:`11874`
1179 - Get ready for Python 4. :ghpull:`11874`
1180 - `%env` Magic now has heuristic to hide potentially sensitive values :ghpull:`11896`
1180 - `%env` Magic now has heuristic to hide potentially sensitive values :ghpull:`11896`
1181
1181
1182 This is a small release despite a number of Pull Request Pending that need to
1182 This is a small release despite a number of Pull Request Pending that need to
1183 be reviewed/worked on. Many of the core developers have been busy outside of
1183 be reviewed/worked on. Many of the core developers have been busy outside of
1184 IPython/Jupyter and we thanks all contributor for their patience; we'll work on
1184 IPython/Jupyter and we thanks all contributor for their patience; we'll work on
1185 these as soon as we have time.
1185 these as soon as we have time.
1186
1186
1187
1187
1188 .. _version780:
1188 .. _version780:
1189
1189
1190 IPython 7.8.0
1190 IPython 7.8.0
1191 =============
1191 =============
1192
1192
1193 IPython 7.8.0 contain a few bugfix and 2 new APIs:
1193 IPython 7.8.0 contain a few bugfix and 2 new APIs:
1194
1194
1195 - Enable changing the font color for LaTeX rendering :ghpull:`11840`
1195 - Enable changing the font color for LaTeX rendering :ghpull:`11840`
1196 - and Re-Expose some PDB API (see below)
1196 - and Re-Expose some PDB API (see below)
1197
1197
1198 Expose Pdb API
1198 Expose Pdb API
1199 --------------
1199 --------------
1200
1200
1201 Expose the built-in ``pdb.Pdb`` API. ``Pdb`` constructor arguments are generically
1201 Expose the built-in ``pdb.Pdb`` API. ``Pdb`` constructor arguments are generically
1202 exposed, regardless of python version.
1202 exposed, regardless of python version.
1203 Newly exposed arguments:
1203 Newly exposed arguments:
1204
1204
1205 - ``skip`` - Python 3.1+
1205 - ``skip`` - Python 3.1+
1206 - ``nosiginnt`` - Python 3.2+
1206 - ``nosiginnt`` - Python 3.2+
1207 - ``readrc`` - Python 3.6+
1207 - ``readrc`` - Python 3.6+
1208
1208
1209 Try it out::
1209 Try it out::
1210
1210
1211 from IPython.terminal.debugger import TerminalPdb
1211 from IPython.terminal.debugger import TerminalPdb
1212 pdb = TerminalPdb(skip=["skipthismodule"])
1212 pdb = TerminalPdb(skip=["skipthismodule"])
1213
1213
1214
1214
1215 See :ghpull:`11840`
1215 See :ghpull:`11840`
1216
1216
1217 .. _version770:
1217 .. _version770:
1218
1218
1219 IPython 7.7.0
1219 IPython 7.7.0
1220 =============
1220 =============
1221
1221
1222 IPython 7.7.0 contain multiple bug fixes and documentation updates; Here are a
1222 IPython 7.7.0 contain multiple bug fixes and documentation updates; Here are a
1223 few of the outstanding issue fixed:
1223 few of the outstanding issue fixed:
1224
1224
1225 - Fix a bug introduced in 7.6 where the ``%matplotlib`` magic would fail on
1225 - Fix a bug introduced in 7.6 where the ``%matplotlib`` magic would fail on
1226 previously acceptable arguments :ghpull:`11814`.
1226 previously acceptable arguments :ghpull:`11814`.
1227 - Fix the manage location on freebsd :ghpull:`11808`.
1227 - Fix the manage location on freebsd :ghpull:`11808`.
1228 - Fix error message about aliases after ``%reset`` call in ipykernel
1228 - Fix error message about aliases after ``%reset`` call in ipykernel
1229 :ghpull:`11806`
1229 :ghpull:`11806`
1230 - Fix Duplication completions in emacs :ghpull:`11803`
1230 - Fix Duplication completions in emacs :ghpull:`11803`
1231
1231
1232 We are planning to adopt `NEP29 <https://github.com/numpy/numpy/pull/14086>`_
1232 We are planning to adopt `NEP29 <https://github.com/numpy/numpy/pull/14086>`_
1233 (still currently in draft) which may make this minor version of IPython the
1233 (still currently in draft) which may make this minor version of IPython the
1234 last one to support Python 3.5 and will make the code base more aggressive
1234 last one to support Python 3.5 and will make the code base more aggressive
1235 toward removing compatibility with older versions of Python.
1235 toward removing compatibility with older versions of Python.
1236
1236
1237 GitHub now support to give only "Triage" permissions to users; if you'd like to
1237 GitHub now support to give only "Triage" permissions to users; if you'd like to
1238 help close stale issues and labels issues please reach to us with your GitHub
1238 help close stale issues and labels issues please reach to us with your GitHub
1239 Username and we'll add you to the triage team. It is a great way to start
1239 Username and we'll add you to the triage team. It is a great way to start
1240 contributing and a path toward getting commit rights.
1240 contributing and a path toward getting commit rights.
1241
1241
1242 .. _version761:
1242 .. _version761:
1243
1243
1244 IPython 7.6.1
1244 IPython 7.6.1
1245 =============
1245 =============
1246
1246
1247 IPython 7.6.1 contain a critical bugfix in the ``%timeit`` magic, which would
1247 IPython 7.6.1 contain a critical bugfix in the ``%timeit`` magic, which would
1248 crash on some inputs as a side effect of :ghpull:`11716`. See :ghpull:`11812`
1248 crash on some inputs as a side effect of :ghpull:`11716`. See :ghpull:`11812`
1249
1249
1250
1250
1251 .. _whatsnew760:
1251 .. _whatsnew760:
1252
1252
1253 IPython 7.6.0
1253 IPython 7.6.0
1254 =============
1254 =============
1255
1255
1256 IPython 7.6.0 contains a couple of bug fixes and number of small features
1256 IPython 7.6.0 contains a couple of bug fixes and number of small features
1257 additions as well as some compatibility with the current development version of
1257 additions as well as some compatibility with the current development version of
1258 Python 3.8.
1258 Python 3.8.
1259
1259
1260 - Add a ``-l`` option to :magic:`psearch` to list the available search
1260 - Add a ``-l`` option to :magic:`psearch` to list the available search
1261 types. :ghpull:`11672`
1261 types. :ghpull:`11672`
1262 - Support ``PathLike`` for ``DisplayObject`` and ``Image``. :ghpull:`11764`
1262 - Support ``PathLike`` for ``DisplayObject`` and ``Image``. :ghpull:`11764`
1263 - Configurability of timeout in the test suite for slow platforms.
1263 - Configurability of timeout in the test suite for slow platforms.
1264 :ghpull:`11756`
1264 :ghpull:`11756`
1265 - Accept any casing for matplotlib backend. :ghpull:`121748`
1265 - Accept any casing for matplotlib backend. :ghpull:`121748`
1266 - Properly skip test that requires numpy to be installed :ghpull:`11723`
1266 - Properly skip test that requires numpy to be installed :ghpull:`11723`
1267 - More support for Python 3.8 and positional only arguments (pep570)
1267 - More support for Python 3.8 and positional only arguments (pep570)
1268 :ghpull:`11720`
1268 :ghpull:`11720`
1269 - Unicode names for the completion are loaded lazily on first use which
1269 - Unicode names for the completion are loaded lazily on first use which
1270 should decrease startup time. :ghpull:`11693`
1270 should decrease startup time. :ghpull:`11693`
1271 - Autoreload now update the types of reloaded objects; this for example allow
1271 - Autoreload now update the types of reloaded objects; this for example allow
1272 pickling of reloaded objects. :ghpull:`11644`
1272 pickling of reloaded objects. :ghpull:`11644`
1273 - Fix a bug where ``%%time`` magic would suppress cell output. :ghpull:`11716`
1273 - Fix a bug where ``%%time`` magic would suppress cell output. :ghpull:`11716`
1274
1274
1275
1275
1276 Prepare migration to pytest (instead of nose) for testing
1276 Prepare migration to pytest (instead of nose) for testing
1277 ---------------------------------------------------------
1277 ---------------------------------------------------------
1278
1278
1279 Most of the work between 7.5 and 7.6 was to prepare the migration from our
1279 Most of the work between 7.5 and 7.6 was to prepare the migration from our
1280 testing framework to pytest. Most of the test suite should now work by simply
1280 testing framework to pytest. Most of the test suite should now work by simply
1281 issuing ``pytest`` from the root of the repository.
1281 issuing ``pytest`` from the root of the repository.
1282
1282
1283 The migration to pytest is just at its beginning. Many of our test still rely
1283 The migration to pytest is just at its beginning. Many of our test still rely
1284 on IPython-specific plugins for nose using pytest (doctest using IPython syntax
1284 on IPython-specific plugins for nose using pytest (doctest using IPython syntax
1285 is one example of this where test appear as "passing", while no code has been
1285 is one example of this where test appear as "passing", while no code has been
1286 ran). Many test also need to be updated like ``yield-test`` to be properly
1286 ran). Many test also need to be updated like ``yield-test`` to be properly
1287 parametrized tests.
1287 parametrized tests.
1288
1288
1289 Migration to pytest allowed me to discover a number of issues in our test
1289 Migration to pytest allowed me to discover a number of issues in our test
1290 suite; which was hiding a number of subtle issues – or not actually running
1290 suite; which was hiding a number of subtle issues – or not actually running
1291 some of the tests in our test suite – I have thus corrected many of those; like
1291 some of the tests in our test suite – I have thus corrected many of those; like
1292 improperly closed resources; or used of deprecated features. I also made use of
1292 improperly closed resources; or used of deprecated features. I also made use of
1293 the ``pytest --durations=...`` to find some of our slowest test and speed them
1293 the ``pytest --durations=...`` to find some of our slowest test and speed them
1294 up (our test suite can now be up to 10% faster). Pytest as also a variety of
1294 up (our test suite can now be up to 10% faster). Pytest as also a variety of
1295 plugins and flags which will make the code quality of IPython and the testing
1295 plugins and flags which will make the code quality of IPython and the testing
1296 experience better.
1296 experience better.
1297
1297
1298 Misc
1298 Misc
1299 ----
1299 ----
1300
1300
1301 We skipped the release of 7.6 at the end of May, but will attempt to get back
1301 We skipped the release of 7.6 at the end of May, but will attempt to get back
1302 on schedule. We are starting to think about making introducing backward
1302 on schedule. We are starting to think about making introducing backward
1303 incompatible change and start the 8.0 series.
1303 incompatible change and start the 8.0 series.
1304
1304
1305 Special Thanks to Gabriel (@gpotter2 on GitHub), who among other took care many
1305 Special Thanks to Gabriel (@gpotter2 on GitHub), who among other took care many
1306 of the remaining task for 7.4 and 7.5, like updating the website.
1306 of the remaining task for 7.4 and 7.5, like updating the website.
1307
1307
1308 .. _whatsnew750:
1308 .. _whatsnew750:
1309
1309
1310 IPython 7.5.0
1310 IPython 7.5.0
1311 =============
1311 =============
1312
1312
1313 IPython 7.5.0 consist mostly of bug-fixes, and documentation updates, with one
1313 IPython 7.5.0 consist mostly of bug-fixes, and documentation updates, with one
1314 minor new feature. The `Audio` display element can now be assigned an element
1314 minor new feature. The `Audio` display element can now be assigned an element
1315 id when displayed in browser. See :ghpull:`11670`
1315 id when displayed in browser. See :ghpull:`11670`
1316
1316
1317 The major outstanding bug fix correct a change of behavior that was introduce
1317 The major outstanding bug fix correct a change of behavior that was introduce
1318 in 7.4.0 where some cell magics would not be able to access or modify global
1318 in 7.4.0 where some cell magics would not be able to access or modify global
1319 scope when using the ``@needs_local_scope`` decorator. This was typically
1319 scope when using the ``@needs_local_scope`` decorator. This was typically
1320 encountered with the ``%%time`` and ``%%timeit`` magics. See :ghissue:`11659`
1320 encountered with the ``%%time`` and ``%%timeit`` magics. See :ghissue:`11659`
1321 and :ghpull:`11698`.
1321 and :ghpull:`11698`.
1322
1322
1323 .. _whatsnew740:
1323 .. _whatsnew740:
1324
1324
1325 IPython 7.4.0
1325 IPython 7.4.0
1326 =============
1326 =============
1327
1327
1328 Unicode name completions
1328 Unicode name completions
1329 ------------------------
1329 ------------------------
1330
1330
1331 Previously, we provided completion for a unicode name with its relative symbol.
1331 Previously, we provided completion for a unicode name with its relative symbol.
1332 With this, now IPython provides complete suggestions to unicode name symbols.
1332 With this, now IPython provides complete suggestions to unicode name symbols.
1333
1333
1334 As on the PR, if user types ``\LAT<tab>``, IPython provides a list of
1334 As on the PR, if user types ``\LAT<tab>``, IPython provides a list of
1335 possible completions. In this case, it would be something like::
1335 possible completions. In this case, it would be something like::
1336
1336
1337 'LATIN CAPITAL LETTER A',
1337 'LATIN CAPITAL LETTER A',
1338 'LATIN CAPITAL LETTER B',
1338 'LATIN CAPITAL LETTER B',
1339 'LATIN CAPITAL LETTER C',
1339 'LATIN CAPITAL LETTER C',
1340 'LATIN CAPITAL LETTER D',
1340 'LATIN CAPITAL LETTER D',
1341 ....
1341 ....
1342
1342
1343 This help to type unicode character that do not have short latex aliases, and
1343 This help to type unicode character that do not have short latex aliases, and
1344 have long unicode names. for example ``Ν°``, ``\GREEK CAPITAL LETTER HETA``.
1344 have long unicode names. for example ``Ν°``, ``\GREEK CAPITAL LETTER HETA``.
1345
1345
1346 This feature was contributed by Luciana Marques :ghpull:`11583`.
1346 This feature was contributed by Luciana Marques :ghpull:`11583`.
1347
1347
1348 Make audio normalization optional
1348 Make audio normalization optional
1349 ---------------------------------
1349 ---------------------------------
1350
1350
1351 Added 'normalize' argument to `IPython.display.Audio`. This argument applies
1351 Added 'normalize' argument to `IPython.display.Audio`. This argument applies
1352 when audio data is given as an array of samples. The default of `normalize=True`
1352 when audio data is given as an array of samples. The default of `normalize=True`
1353 preserves prior behavior of normalizing the audio to the maximum possible range.
1353 preserves prior behavior of normalizing the audio to the maximum possible range.
1354 Setting to `False` disables normalization.
1354 Setting to `False` disables normalization.
1355
1355
1356
1356
1357 Miscellaneous
1357 Miscellaneous
1358 -------------
1358 -------------
1359
1359
1360 - Fix improper acceptation of ``return`` outside of functions. :ghpull:`11641`.
1360 - Fix improper acceptation of ``return`` outside of functions. :ghpull:`11641`.
1361 - Fixed PyQt 5.11 backwards incompatibility causing sip import failure.
1361 - Fixed PyQt 5.11 backwards incompatibility causing sip import failure.
1362 :ghpull:`11613`.
1362 :ghpull:`11613`.
1363 - Fix Bug where ``type?`` would crash IPython. :ghpull:`1608`.
1363 - Fix Bug where ``type?`` would crash IPython. :ghpull:`1608`.
1364 - Allow to apply ``@needs_local_scope`` to cell magics for convenience.
1364 - Allow to apply ``@needs_local_scope`` to cell magics for convenience.
1365 :ghpull:`11542`.
1365 :ghpull:`11542`.
1366
1366
1367 .. _whatsnew730:
1367 .. _whatsnew730:
1368
1368
1369 IPython 7.3.0
1369 IPython 7.3.0
1370 =============
1370 =============
1371
1371
1372
1372
1373 IPython 7.3.0 bring several bug fixes and small improvements that you will
1373 IPython 7.3.0 bring several bug fixes and small improvements that you will
1374 described bellow.
1374 described below.
1375
1375
1376 The biggest change to this release is the implementation of the ``%conda`` and
1376 The biggest change to this release is the implementation of the ``%conda`` and
1377 ``%pip`` magics, that will attempt to install packages in the **current
1377 ``%pip`` magics, that will attempt to install packages in the **current
1378 environment**. You may still need to restart your interpreter or kernel for the
1378 environment**. You may still need to restart your interpreter or kernel for the
1379 change to be taken into account, but it should simplify installation of packages
1379 change to be taken into account, but it should simplify installation of packages
1380 into remote environment. Installing using pip/conda from the command line is
1380 into remote environment. Installing using pip/conda from the command line is
1381 still the prefer method.
1381 still the prefer method.
1382
1382
1383 The ``%pip`` magic was already present, but was only printing a warning; now it
1383 The ``%pip`` magic was already present, but was only printing a warning; now it
1384 will actually forward commands to pip.
1384 will actually forward commands to pip.
1385
1385
1386 Misc bug fixes and improvements:
1386 Misc bug fixes and improvements:
1387
1387
1388 - Compatibility with Python 3.8.
1388 - Compatibility with Python 3.8.
1389 - Do not expand shell variable in execution magics, and added the
1389 - Do not expand shell variable in execution magics, and added the
1390 ``no_var_expand`` decorator for magic requiring a similar functionality
1390 ``no_var_expand`` decorator for magic requiring a similar functionality
1391 :ghpull:`11516`
1391 :ghpull:`11516`
1392 - Add ``%pip`` and ``%conda`` magic :ghpull:`11524`
1392 - Add ``%pip`` and ``%conda`` magic :ghpull:`11524`
1393 - Re-initialize posix aliases after a ``%reset`` :ghpull:`11528`
1393 - Re-initialize posix aliases after a ``%reset`` :ghpull:`11528`
1394 - Allow the IPython command line to run ``*.ipynb`` files :ghpull:`11529`
1394 - Allow the IPython command line to run ``*.ipynb`` files :ghpull:`11529`
1395
1395
1396 .. _whatsnew720:
1396 .. _whatsnew720:
1397
1397
1398 IPython 7.2.0
1398 IPython 7.2.0
1399 =============
1399 =============
1400
1400
1401 IPython 7.2.0 brings minor bugfixes, improvements, and new configuration options:
1401 IPython 7.2.0 brings minor bugfixes, improvements, and new configuration options:
1402
1402
1403 - Fix a bug preventing PySide2 GUI integration from working :ghpull:`11464`
1403 - Fix a bug preventing PySide2 GUI integration from working :ghpull:`11464`
1404 - Run CI on Mac OS ! :ghpull:`11471`
1404 - Run CI on Mac OS ! :ghpull:`11471`
1405 - Fix IPython "Demo" mode. :ghpull:`11498`
1405 - Fix IPython "Demo" mode. :ghpull:`11498`
1406 - Fix ``%run`` magic with path in name :ghpull:`11499`
1406 - Fix ``%run`` magic with path in name :ghpull:`11499`
1407 - Fix: add CWD to sys.path *after* stdlib :ghpull:`11502`
1407 - Fix: add CWD to sys.path *after* stdlib :ghpull:`11502`
1408 - Better rendering of signatures, especially long ones. :ghpull:`11505`
1408 - Better rendering of signatures, especially long ones. :ghpull:`11505`
1409 - Re-enable jedi by default if it's installed :ghpull:`11506`
1409 - Re-enable jedi by default if it's installed :ghpull:`11506`
1410 - Add New ``minimal`` exception reporting mode (useful for educational purpose). See :ghpull:`11509`
1410 - Add New ``minimal`` exception reporting mode (useful for educational purpose). See :ghpull:`11509`
1411
1411
1412
1412
1413 Added ability to show subclasses when using pinfo and other utilities
1413 Added ability to show subclasses when using pinfo and other utilities
1414 ---------------------------------------------------------------------
1414 ---------------------------------------------------------------------
1415
1415
1416 When using ``?``/``??`` on a class, IPython will now list the first 10 subclasses.
1416 When using ``?``/``??`` on a class, IPython will now list the first 10 subclasses.
1417
1417
1418 Special Thanks to Chris Mentzel of the Moore Foundation for this feature. Chris
1418 Special Thanks to Chris Mentzel of the Moore Foundation for this feature. Chris
1419 is one of the people who played a critical role in IPython/Jupyter getting
1419 is one of the people who played a critical role in IPython/Jupyter getting
1420 funding.
1420 funding.
1421
1421
1422 We are grateful for all the help Chris has given us over the years,
1422 We are grateful for all the help Chris has given us over the years,
1423 and we're now proud to have code contributed by Chris in IPython.
1423 and we're now proud to have code contributed by Chris in IPython.
1424
1424
1425 OSMagics.cd_force_quiet configuration option
1425 OSMagics.cd_force_quiet configuration option
1426 --------------------------------------------
1426 --------------------------------------------
1427
1427
1428 You can set this option to force the %cd magic to behave as if ``-q`` was passed::
1428 You can set this option to force the %cd magic to behave as if ``-q`` was passed::
1429
1429
1430 In [1]: cd /
1430 In [1]: cd /
1431 /
1431 /
1432
1432
1433 In [2]: %config OSMagics.cd_force_quiet = True
1433 In [2]: %config OSMagics.cd_force_quiet = True
1434
1434
1435 In [3]: cd /tmp
1435 In [3]: cd /tmp
1436
1436
1437 In [4]:
1437 In [4]:
1438
1438
1439 See :ghpull:`11491`
1439 See :ghpull:`11491`
1440
1440
1441 In vi editing mode, whether the prompt includes the current vi mode can now be configured
1441 In vi editing mode, whether the prompt includes the current vi mode can now be configured
1442 -----------------------------------------------------------------------------------------
1442 -----------------------------------------------------------------------------------------
1443
1443
1444 Set the ``TerminalInteractiveShell.prompt_includes_vi_mode`` to a boolean value
1444 Set the ``TerminalInteractiveShell.prompt_includes_vi_mode`` to a boolean value
1445 (default: True) to control this feature. See :ghpull:`11492`
1445 (default: True) to control this feature. See :ghpull:`11492`
1446
1446
1447 .. _whatsnew710:
1447 .. _whatsnew710:
1448
1448
1449 IPython 7.1.0
1449 IPython 7.1.0
1450 =============
1450 =============
1451
1451
1452 IPython 7.1.0 is the first minor release after 7.0.0 and mostly brings fixes to
1452 IPython 7.1.0 is the first minor release after 7.0.0 and mostly brings fixes to
1453 new features, internal refactoring, and fixes for regressions that happened during the 6.x->7.x
1453 new features, internal refactoring, and fixes for regressions that happened during the 6.x->7.x
1454 transition. It also brings **Compatibility with Python 3.7.1**, as we're
1454 transition. It also brings **Compatibility with Python 3.7.1**, as we're
1455 unwillingly relying on a bug in CPython.
1455 unwillingly relying on a bug in CPython.
1456
1456
1457 New Core Dev:
1457 New Core Dev:
1458
1458
1459 - We welcome Jonathan Slenders to the commiters. Jonathan has done a fantastic
1459 - We welcome Jonathan Slenders to the committers. Jonathan has done a fantastic
1460 work on prompt_toolkit, and we'd like to recognise his impact by giving him
1460 work on prompt_toolkit, and we'd like to recognise his impact by giving him
1461 commit rights. :ghissue:`11397`
1461 commit rights. :ghissue:`11397`
1462
1462
1463 Notable Changes
1463 Notable Changes
1464
1464
1465 - Major update of "latex to unicode" tab completion map (see below)
1465 - Major update of "latex to unicode" tab completion map (see below)
1466
1466
1467 Notable New Features:
1467 Notable New Features:
1468
1468
1469 - Restore functionality and documentation of the **sphinx directive**, which
1469 - Restore functionality and documentation of the **sphinx directive**, which
1470 is now stricter (fail on error by daefault), has new configuration options,
1470 is now stricter (fail on error by daefault), has new configuration options,
1471 has a brand new documentation page :ref:`ipython_directive` (which needs
1471 has a brand new documentation page :ref:`ipython_directive` (which needs
1472 some cleanup). It is also now *tested* so we hope to have less regressions.
1472 some cleanup). It is also now *tested* so we hope to have less regressions.
1473 :ghpull:`11402`
1473 :ghpull:`11402`
1474
1474
1475 - ``IPython.display.Video`` now supports ``width`` and ``height`` arguments,
1475 - ``IPython.display.Video`` now supports ``width`` and ``height`` arguments,
1476 allowing a custom width and height to be set instead of using the video's
1476 allowing a custom width and height to be set instead of using the video's
1477 width and height. :ghpull:`11353`
1477 width and height. :ghpull:`11353`
1478
1478
1479 - Warn when using ``HTML('<iframe>')`` instead of ``IFrame`` :ghpull:`11350`
1479 - Warn when using ``HTML('<iframe>')`` instead of ``IFrame`` :ghpull:`11350`
1480
1480
1481 - Allow Dynamic switching of editing mode between vi/emacs and show
1481 - Allow Dynamic switching of editing mode between vi/emacs and show
1482 normal/input mode in prompt when using vi. :ghpull:`11390`. Use ``%config
1482 normal/input mode in prompt when using vi. :ghpull:`11390`. Use ``%config
1483 TerminalInteractiveShell.editing_mode = 'vi'`` or ``%config
1483 TerminalInteractiveShell.editing_mode = 'vi'`` or ``%config
1484 TerminalInteractiveShell.editing_mode = 'emacs'`` to dynamically switch
1484 TerminalInteractiveShell.editing_mode = 'emacs'`` to dynamically switch
1485 between modes.
1485 between modes.
1486
1486
1487
1487
1488 Notable Fixes:
1488 Notable Fixes:
1489
1489
1490 - Fix entering of **multi-line blocks in terminal** IPython, and various
1490 - Fix entering of **multi-line blocks in terminal** IPython, and various
1491 crashes in the new input transformation machinery :ghpull:`11354`,
1491 crashes in the new input transformation machinery :ghpull:`11354`,
1492 :ghpull:`11356`, :ghpull:`11358`. These also fix a **Compatibility bug
1492 :ghpull:`11356`, :ghpull:`11358`. These also fix a **Compatibility bug
1493 with Python 3.7.1**.
1493 with Python 3.7.1**.
1494
1494
1495 - Fix moving through generator stack in ipdb :ghpull:`11266`
1495 - Fix moving through generator stack in ipdb :ghpull:`11266`
1496
1496
1497 - %Magic command arguments now support quoting. :ghpull:`11330`
1497 - %Magic command arguments now support quoting. :ghpull:`11330`
1498
1498
1499 - Re-add ``rprint`` and ``rprinte`` aliases. :ghpull:`11331`
1499 - Re-add ``rprint`` and ``rprinte`` aliases. :ghpull:`11331`
1500
1500
1501 - Remove implicit dependency on ``ipython_genutils`` :ghpull:`11317`
1501 - Remove implicit dependency on ``ipython_genutils`` :ghpull:`11317`
1502
1502
1503 - Make ``nonlocal`` raise ``SyntaxError`` instead of silently failing in async
1503 - Make ``nonlocal`` raise ``SyntaxError`` instead of silently failing in async
1504 mode. :ghpull:`11382`
1504 mode. :ghpull:`11382`
1505
1505
1506 - Fix mishandling of magics and ``= !`` assignment just after a dedent in
1506 - Fix mishandling of magics and ``= !`` assignment just after a dedent in
1507 nested code blocks :ghpull:`11418`
1507 nested code blocks :ghpull:`11418`
1508
1508
1509 - Fix instructions for custom shortcuts :ghpull:`11426`
1509 - Fix instructions for custom shortcuts :ghpull:`11426`
1510
1510
1511
1511
1512 Notable Internals improvements:
1512 Notable Internals improvements:
1513
1513
1514 - Use of ``os.scandir`` (Python 3 only) to speed up some file system operations.
1514 - Use of ``os.scandir`` (Python 3 only) to speed up some file system operations.
1515 :ghpull:`11365`
1515 :ghpull:`11365`
1516
1516
1517 - use ``perf_counter`` instead of ``clock`` for more precise
1517 - use ``perf_counter`` instead of ``clock`` for more precise
1518 timing results with ``%time`` :ghpull:`11376`
1518 timing results with ``%time`` :ghpull:`11376`
1519
1519
1520 Many thanks to all the contributors and in particular to ``bartskowron`` and
1520 Many thanks to all the contributors and in particular to ``bartskowron`` and
1521 ``tonyfast`` who handled some pretty complicated bugs in the input machinery. We
1521 ``tonyfast`` who handled some pretty complicated bugs in the input machinery. We
1522 had a number of first time contributors and maybe hacktoberfest participants that
1522 had a number of first time contributors and maybe hacktoberfest participants that
1523 made significant contributions and helped us free some time to focus on more
1523 made significant contributions and helped us free some time to focus on more
1524 complicated bugs.
1524 complicated bugs.
1525
1525
1526 You
1526 You
1527 can see all the closed issues and Merged PR, new features and fixes `here
1527 can see all the closed issues and Merged PR, new features and fixes `here
1528 <https://github.com/ipython/ipython/issues?utf8=%E2%9C%93&q=+is%3Aclosed+milestone%3A7.1+>`_.
1528 <https://github.com/ipython/ipython/issues?utf8=%E2%9C%93&q=+is%3Aclosed+milestone%3A7.1+>`_.
1529
1529
1530 Unicode Completion update
1530 Unicode Completion update
1531 -------------------------
1531 -------------------------
1532
1532
1533 In IPython 7.1 the Unicode completion map has been updated and synchronized with
1533 In IPython 7.1 the Unicode completion map has been updated and synchronized with
1534 the Julia language.
1534 the Julia language.
1535
1535
1536 Added and removed character characters:
1536 Added and removed character characters:
1537
1537
1538 ``\jmath`` (``Θ·``), ``\\underleftrightarrow`` (U+034D, combining) have been
1538 ``\jmath`` (``Θ·``), ``\\underleftrightarrow`` (U+034D, combining) have been
1539 added, while ``\\textasciicaron`` have been removed
1539 added, while ``\\textasciicaron`` have been removed
1540
1540
1541 Some sequences have seen their prefix removed:
1541 Some sequences have seen their prefix removed:
1542
1542
1543 - 6 characters ``\text...<tab>`` should now be inputed with ``\...<tab>`` directly,
1543 - 6 characters ``\text...<tab>`` should now be inputed with ``\...<tab>`` directly,
1544 - 45 characters ``\Elz...<tab>`` should now be inputed with ``\...<tab>`` directly,
1544 - 45 characters ``\Elz...<tab>`` should now be inputed with ``\...<tab>`` directly,
1545 - 65 characters ``\B...<tab>`` should now be inputed with ``\...<tab>`` directly,
1545 - 65 characters ``\B...<tab>`` should now be inputed with ``\...<tab>`` directly,
1546 - 450 characters ``\m...<tab>`` should now be inputed with ``\...<tab>`` directly,
1546 - 450 characters ``\m...<tab>`` should now be inputed with ``\...<tab>`` directly,
1547
1547
1548 Some sequences have seen their prefix shortened:
1548 Some sequences have seen their prefix shortened:
1549
1549
1550 - 5 characters ``\mitBbb...<tab>`` should now be inputed with ``\bbi...<tab>`` directly,
1550 - 5 characters ``\mitBbb...<tab>`` should now be inputed with ``\bbi...<tab>`` directly,
1551 - 52 characters ``\mit...<tab>`` should now be inputed with ``\i...<tab>`` directly,
1551 - 52 characters ``\mit...<tab>`` should now be inputed with ``\i...<tab>`` directly,
1552 - 216 characters ``\mbfit...<tab>`` should now be inputed with ``\bi...<tab>`` directly,
1552 - 216 characters ``\mbfit...<tab>`` should now be inputed with ``\bi...<tab>`` directly,
1553 - 222 characters ``\mbf...<tab>`` should now be inputed with ``\b...<tab>`` directly,
1553 - 222 characters ``\mbf...<tab>`` should now be inputed with ``\b...<tab>`` directly,
1554
1554
1555 A couple of characters had their sequence simplified:
1555 A couple of characters had their sequence simplified:
1556
1556
1557 - ``Γ°``, type ``\dh<tab>``, instead of ``\eth<tab>``
1557 - ``Γ°``, type ``\dh<tab>``, instead of ``\eth<tab>``
1558 - ``Δ§``, type ``\hbar<tab>``, instead of ``\Elzxh<tab>``
1558 - ``Δ§``, type ``\hbar<tab>``, instead of ``\Elzxh<tab>``
1559 - ``ΙΈ``, type ``\ltphi<tab>``, instead of ``\textphi<tab>``
1559 - ``ΙΈ``, type ``\ltphi<tab>``, instead of ``\textphi<tab>``
1560 - ``Ο΄``, type ``\varTheta<tab>``, instead of ``\textTheta<tab>``
1560 - ``Ο΄``, type ``\varTheta<tab>``, instead of ``\textTheta<tab>``
1561 - ``ℇ``, type ``\eulermascheroni<tab>``, instead of ``\Eulerconst<tab>``
1561 - ``ℇ``, type ``\eulermascheroni<tab>``, instead of ``\Eulerconst<tab>``
1562 - ``β„Ž``, type ``\planck<tab>``, instead of ``\Planckconst<tab>``
1562 - ``β„Ž``, type ``\planck<tab>``, instead of ``\Planckconst<tab>``
1563
1563
1564 - U+0336 (COMBINING LONG STROKE OVERLAY), type ``\strike<tab>``, instead of ``\Elzbar<tab>``.
1564 - U+0336 (COMBINING LONG STROKE OVERLAY), type ``\strike<tab>``, instead of ``\Elzbar<tab>``.
1565
1565
1566 A couple of sequences have been updated:
1566 A couple of sequences have been updated:
1567
1567
1568 - ``\varepsilon`` now gives ``Ι›`` (GREEK SMALL LETTER EPSILON) instead of ``Ξ΅`` (GREEK LUNATE EPSILON SYMBOL),
1568 - ``\varepsilon`` now gives ``Ι›`` (GREEK SMALL LETTER EPSILON) instead of ``Ξ΅`` (GREEK LUNATE EPSILON SYMBOL),
1569 - ``\underbar`` now gives U+0331 (COMBINING MACRON BELOW) instead of U+0332 (COMBINING LOW LINE).
1569 - ``\underbar`` now gives U+0331 (COMBINING MACRON BELOW) instead of U+0332 (COMBINING LOW LINE).
1570
1570
1571
1571
1572 .. _whatsnew700:
1572 .. _whatsnew700:
1573
1573
1574 IPython 7.0.0
1574 IPython 7.0.0
1575 =============
1575 =============
1576
1576
1577 Released Thursday September 27th, 2018
1577 Released Thursday September 27th, 2018
1578
1578
1579 IPython 7 includes major feature improvements.
1579 IPython 7 includes major feature improvements.
1580 This is also the second major version of IPython to support only
1580 This is also the second major version of IPython to support only
1581 Python 3 – starting at Python 3.4. Python 2 is still community-supported
1581 Python 3 – starting at Python 3.4. Python 2 is still community-supported
1582 on the bugfix only 5.x branch, but we remind you that Python 2 "end of life"
1582 on the bugfix only 5.x branch, but we remind you that Python 2 "end of life"
1583 is on Jan 1st 2020.
1583 is on Jan 1st 2020.
1584
1584
1585 We were able to backport bug fixes to the 5.x branch thanks to our backport bot which
1585 We were able to backport bug fixes to the 5.x branch thanks to our backport bot which
1586 backported more than `70 Pull-Requests
1586 backported more than `70 Pull-Requests
1587 <https://github.com/ipython/ipython/pulls?page=3&q=is%3Apr+sort%3Aupdated-desc+author%3Aapp%2Fmeeseeksdev++5.x&utf8=%E2%9C%93>`_, but there are still many PRs that required manual work. This is an area of the project where you can easily contribute by looking for `PRs that still need manual backport <https://github.com/ipython/ipython/issues?q=label%3A%22Still+Needs+Manual+Backport%22+is%3Aclosed+sort%3Aupdated-desc>`_
1587 <https://github.com/ipython/ipython/pulls?page=3&q=is%3Apr+sort%3Aupdated-desc+author%3Aapp%2Fmeeseeksdev++5.x&utf8=%E2%9C%93>`_, but there are still many PRs that required manual work. This is an area of the project where you can easily contribute by looking for `PRs that still need manual backport <https://github.com/ipython/ipython/issues?q=label%3A%22Still+Needs+Manual+Backport%22+is%3Aclosed+sort%3Aupdated-desc>`_
1588
1588
1589 The IPython 6.x branch will likely not see any further release unless critical
1589 The IPython 6.x branch will likely not see any further release unless critical
1590 bugs are found.
1590 bugs are found.
1591
1591
1592 Make sure you have pip > 9.0 before upgrading. You should be able to update by running:
1592 Make sure you have pip > 9.0 before upgrading. You should be able to update by running:
1593
1593
1594 .. code::
1594 .. code::
1595
1595
1596 pip install ipython --upgrade
1596 pip install ipython --upgrade
1597
1597
1598 .. only:: ipydev
1598 .. only:: ipydev
1599
1599
1600 If you are trying to install or update an ``alpha``, ``beta``, or ``rc``
1600 If you are trying to install or update an ``alpha``, ``beta``, or ``rc``
1601 version, use pip ``--pre`` flag.
1601 version, use pip ``--pre`` flag.
1602
1602
1603 .. code::
1603 .. code::
1604
1604
1605 pip install ipython --upgrade --pre
1605 pip install ipython --upgrade --pre
1606
1606
1607
1607
1608 Or, if you have conda installed:
1608 Or, if you have conda installed:
1609
1609
1610 .. code::
1610 .. code::
1611
1611
1612 conda install ipython
1612 conda install ipython
1613
1613
1614
1614
1615
1615
1616 Prompt Toolkit 2.0
1616 Prompt Toolkit 2.0
1617 ------------------
1617 ------------------
1618
1618
1619 IPython 7.0+ now uses ``prompt_toolkit 2.0``. If you still need to use an earlier
1619 IPython 7.0+ now uses ``prompt_toolkit 2.0``. If you still need to use an earlier
1620 ``prompt_toolkit`` version, you may need to pin IPython to ``<7.0``.
1620 ``prompt_toolkit`` version, you may need to pin IPython to ``<7.0``.
1621
1621
1622 Autowait: Asynchronous REPL
1622 Autowait: Asynchronous REPL
1623 ---------------------------
1623 ---------------------------
1624
1624
1625 Staring with IPython 7.0 on Python 3.6+, IPython can automatically ``await``
1625 Staring with IPython 7.0 on Python 3.6+, IPython can automatically ``await``
1626 top level code. You should not need to access an event loop or runner
1626 top level code. You should not need to access an event loop or runner
1627 yourself. To learn more, read the :ref:`autoawait` section of our docs, see
1627 yourself. To learn more, read the :ref:`autoawait` section of our docs, see
1628 :ghpull:`11265`, or try the following code::
1628 :ghpull:`11265`, or try the following code::
1629
1629
1630 Python 3.6.0
1630 Python 3.6.0
1631 Type 'copyright', 'credits' or 'license' for more information
1631 Type 'copyright', 'credits' or 'license' for more information
1632 IPython 7.0.0 -- An enhanced Interactive Python. Type '?' for help.
1632 IPython 7.0.0 -- An enhanced Interactive Python. Type '?' for help.
1633
1633
1634 In [1]: import aiohttp
1634 In [1]: import aiohttp
1635 ...: result = aiohttp.get('https://api.github.com')
1635 ...: result = aiohttp.get('https://api.github.com')
1636
1636
1637 In [2]: response = await result
1637 In [2]: response = await result
1638 <pause for a few 100s ms>
1638 <pause for a few 100s ms>
1639
1639
1640 In [3]: await response.json()
1640 In [3]: await response.json()
1641 Out[3]:
1641 Out[3]:
1642 {'authorizations_url': 'https://api.github.com/authorizations',
1642 {'authorizations_url': 'https://api.github.com/authorizations',
1643 'code_search_url': 'https://api.github.com/search/code?q={query}{&page,per_page,sort,order}',
1643 'code_search_url': 'https://api.github.com/search/code?q={query}{&page,per_page,sort,order}',
1644 ...
1644 ...
1645 }
1645 }
1646
1646
1647 .. note::
1647 .. note::
1648
1648
1649 Async integration is experimental code, behavior may change or be removed
1649 Async integration is experimental code, behavior may change or be removed
1650 between Python and IPython versions without warnings.
1650 between Python and IPython versions without warnings.
1651
1651
1652 Integration is by default with `asyncio`, but other libraries can be configured --
1652 Integration is by default with `asyncio`, but other libraries can be configured --
1653 like ``curio`` or ``trio`` -- to improve concurrency in the REPL::
1653 like ``curio`` or ``trio`` -- to improve concurrency in the REPL::
1654
1654
1655 In [1]: %autoawait trio
1655 In [1]: %autoawait trio
1656
1656
1657 In [2]: import trio
1657 In [2]: import trio
1658
1658
1659 In [3]: async def child(i):
1659 In [3]: async def child(i):
1660 ...: print(" child %s goes to sleep"%i)
1660 ...: print(" child %s goes to sleep"%i)
1661 ...: await trio.sleep(2)
1661 ...: await trio.sleep(2)
1662 ...: print(" child %s wakes up"%i)
1662 ...: print(" child %s wakes up"%i)
1663
1663
1664 In [4]: print('parent start')
1664 In [4]: print('parent start')
1665 ...: async with trio.open_nursery() as n:
1665 ...: async with trio.open_nursery() as n:
1666 ...: for i in range(3):
1666 ...: for i in range(3):
1667 ...: n.spawn(child, i)
1667 ...: n.spawn(child, i)
1668 ...: print('parent end')
1668 ...: print('parent end')
1669 parent start
1669 parent start
1670 child 2 goes to sleep
1670 child 2 goes to sleep
1671 child 0 goes to sleep
1671 child 0 goes to sleep
1672 child 1 goes to sleep
1672 child 1 goes to sleep
1673 <about 2 seconds pause>
1673 <about 2 seconds pause>
1674 child 2 wakes up
1674 child 2 wakes up
1675 child 1 wakes up
1675 child 1 wakes up
1676 child 0 wakes up
1676 child 0 wakes up
1677 parent end
1677 parent end
1678
1678
1679 See :ref:`autoawait` for more information.
1679 See :ref:`autoawait` for more information.
1680
1680
1681
1681
1682 Asynchronous code in a Notebook interface or any other frontend using the
1682 Asynchronous code in a Notebook interface or any other frontend using the
1683 Jupyter Protocol will require further updates to the IPykernel package.
1683 Jupyter Protocol will require further updates to the IPykernel package.
1684
1684
1685 Non-Asynchronous code
1685 Non-Asynchronous code
1686 ~~~~~~~~~~~~~~~~~~~~~
1686 ~~~~~~~~~~~~~~~~~~~~~
1687
1687
1688 As the internal API of IPython is now asynchronous, IPython needs to run under
1688 As the internal API of IPython is now asynchronous, IPython needs to run under
1689 an event loop. In order to allow many workflows, (like using the :magic:`%run`
1689 an event loop. In order to allow many workflows, (like using the :magic:`%run`
1690 magic, or copy-pasting code that explicitly starts/stop event loop), when
1690 magic, or copy-pasting code that explicitly starts/stop event loop), when
1691 top-level code is detected as not being asynchronous, IPython code is advanced
1691 top-level code is detected as not being asynchronous, IPython code is advanced
1692 via a pseudo-synchronous runner, and may not advance pending tasks.
1692 via a pseudo-synchronous runner, and may not advance pending tasks.
1693
1693
1694 Change to Nested Embed
1694 Change to Nested Embed
1695 ~~~~~~~~~~~~~~~~~~~~~~
1695 ~~~~~~~~~~~~~~~~~~~~~~
1696
1696
1697 The introduction of the ability to run async code had some effect on the
1697 The introduction of the ability to run async code had some effect on the
1698 ``IPython.embed()`` API. By default, embed will not allow you to run asynchronous
1698 ``IPython.embed()`` API. By default, embed will not allow you to run asynchronous
1699 code unless an event loop is specified.
1699 code unless an event loop is specified.
1700
1700
1701 Effects on Magics
1701 Effects on Magics
1702 ~~~~~~~~~~~~~~~~~
1702 ~~~~~~~~~~~~~~~~~
1703
1703
1704 Some magics will not work with async until they're updated.
1704 Some magics will not work with async until they're updated.
1705 Contributions welcome.
1705 Contributions welcome.
1706
1706
1707 Expected Future changes
1707 Expected Future changes
1708 ~~~~~~~~~~~~~~~~~~~~~~~
1708 ~~~~~~~~~~~~~~~~~~~~~~~
1709
1709
1710 We expect more internal but public IPython functions to become ``async``, and
1710 We expect more internal but public IPython functions to become ``async``, and
1711 will likely end up having a persistent event loop while IPython is running.
1711 will likely end up having a persistent event loop while IPython is running.
1712
1712
1713 Thanks
1713 Thanks
1714 ~~~~~~
1714 ~~~~~~
1715
1715
1716 This release took more than a year in the making.
1716 This release took more than a year in the making.
1717 The code was rebased a number of
1717 The code was rebased a number of
1718 times; leading to commit authorship that may have been lost in the final
1718 times; leading to commit authorship that may have been lost in the final
1719 Pull-Request. Huge thanks to many people for contribution, discussion, code,
1719 Pull-Request. Huge thanks to many people for contribution, discussion, code,
1720 documentation, use-cases: dalejung, danielballan, ellisonbg, fperez, gnestor,
1720 documentation, use-cases: dalejung, danielballan, ellisonbg, fperez, gnestor,
1721 minrk, njsmith, pganssle, tacaswell, takluyver , vidartf ... And many others.
1721 minrk, njsmith, pganssle, tacaswell, takluyver , vidartf ... And many others.
1722
1722
1723
1723
1724 Autoreload Improvement
1724 Autoreload Improvement
1725 ----------------------
1725 ----------------------
1726
1726
1727 The magic :magic:`%autoreload 2 <autoreload>` now captures new methods added to
1727 The magic :magic:`%autoreload 2 <autoreload>` now captures new methods added to
1728 classes. Earlier, only methods existing as of the initial import were being
1728 classes. Earlier, only methods existing as of the initial import were being
1729 tracked and updated.
1729 tracked and updated.
1730
1730
1731 This new feature helps dual environment development - Jupyter+IDE - where the
1731 This new feature helps dual environment development - Jupyter+IDE - where the
1732 code gradually moves from notebook cells to package files as it gets
1732 code gradually moves from notebook cells to package files as it gets
1733 structured.
1733 structured.
1734
1734
1735 **Example**: An instance of the class ``MyClass`` will be able to access the
1735 **Example**: An instance of the class ``MyClass`` will be able to access the
1736 method ``cube()`` after it is uncommented and the file ``file1.py`` is saved on
1736 method ``cube()`` after it is uncommented and the file ``file1.py`` is saved on
1737 disk.
1737 disk.
1738
1738
1739
1739
1740 .. code::
1740 .. code::
1741
1741
1742 # notebook
1742 # notebook
1743
1743
1744 from mymodule import MyClass
1744 from mymodule import MyClass
1745 first = MyClass(5)
1745 first = MyClass(5)
1746
1746
1747 .. code::
1747 .. code::
1748
1748
1749 # mymodule/file1.py
1749 # mymodule/file1.py
1750
1750
1751 class MyClass:
1751 class MyClass:
1752
1752
1753 def __init__(self, a=10):
1753 def __init__(self, a=10):
1754 self.a = a
1754 self.a = a
1755
1755
1756 def square(self):
1756 def square(self):
1757 print('compute square')
1757 print('compute square')
1758 return self.a*self.a
1758 return self.a*self.a
1759
1759
1760 # def cube(self):
1760 # def cube(self):
1761 # print('compute cube')
1761 # print('compute cube')
1762 # return self.a*self.a*self.a
1762 # return self.a*self.a*self.a
1763
1763
1764
1764
1765
1765
1766
1766
1767 Misc
1767 Misc
1768 ----
1768 ----
1769
1769
1770 The autoindent feature that was deprecated in 5.x was re-enabled and
1770 The autoindent feature that was deprecated in 5.x was re-enabled and
1771 un-deprecated in :ghpull:`11257`
1771 un-deprecated in :ghpull:`11257`
1772
1772
1773 Make :magic:`%run -n -i ... <run>` work correctly. Earlier, if :magic:`%run` was
1773 Make :magic:`%run -n -i ... <run>` work correctly. Earlier, if :magic:`%run` was
1774 passed both arguments, ``-n`` would be silently ignored. See :ghpull:`10308`
1774 passed both arguments, ``-n`` would be silently ignored. See :ghpull:`10308`
1775
1775
1776
1776
1777 The :cellmagic:`%%script` (as well as :cellmagic:`%%bash`,
1777 The :cellmagic:`%%script` (as well as :cellmagic:`%%bash`,
1778 :cellmagic:`%%ruby`... ) cell magics now raise by default if the return code of
1778 :cellmagic:`%%ruby`... ) cell magics now raise by default if the return code of
1779 the given code is non-zero (thus halting execution of further cells in a
1779 the given code is non-zero (thus halting execution of further cells in a
1780 notebook). The behavior can be disable by passing the ``--no-raise-error`` flag.
1780 notebook). The behavior can be disable by passing the ``--no-raise-error`` flag.
1781
1781
1782
1782
1783 Deprecations
1783 Deprecations
1784 ------------
1784 ------------
1785
1785
1786 A couple of unused functions and methods have been deprecated and will be removed
1786 A couple of unused functions and methods have been deprecated and will be removed
1787 in future versions:
1787 in future versions:
1788
1788
1789 - ``IPython.utils.io.raw_print_err``
1789 - ``IPython.utils.io.raw_print_err``
1790 - ``IPython.utils.io.raw_print``
1790 - ``IPython.utils.io.raw_print``
1791
1791
1792
1792
1793 Backwards incompatible changes
1793 Backwards incompatible changes
1794 ------------------------------
1794 ------------------------------
1795
1795
1796 * The API for transforming input before it is parsed as Python code has been
1796 * The API for transforming input before it is parsed as Python code has been
1797 completely redesigned: any custom input transformations will need to be
1797 completely redesigned: any custom input transformations will need to be
1798 rewritten. See :doc:`/config/inputtransforms` for details of the new API.
1798 rewritten. See :doc:`/config/inputtransforms` for details of the new API.
@@ -1,2397 +1,2397
1 ============
1 ============
2 8.x Series
2 8.x Series
3 ============
3 ============
4 .. _version 8.28:
4 .. _version 8.28:
5
5
6 IPython 8.28
6 IPython 8.28
7 ============
7 ============
8
8
9 Slight delay of this September release as I was busy at Pydata Paris last week.
9 Slight delay of this September release as I was busy at Pydata Paris last week.
10 Not many user visible changes for this release, a couple of bug fixes and
10 Not many user visible changes for this release, a couple of bug fixes and
11 workaround:
11 workaround:
12
12
13 - :ghpull:`14480` AssertionError: assert _xterm_term_title_saved in WSL – It is
13 - :ghpull:`14480` AssertionError: assert _xterm_term_title_saved in WSL – It is
14 unclear why the terminal title is not saved in WSL, if you've WSL experience
14 unclear why the terminal title is not saved in WSL, if you've WSL experience
15 we'd love your feedback and help to not just ignore an error
15 we'd love your feedback and help to not just ignore an error
16 - :ghpull:`14510` Fix use of pyside6 >= 6.7.0
16 - :ghpull:`14510` Fix use of pyside6 >= 6.7.0
17 - :ghpull:`14518` Make values public (_tb_highlight & _tb_highlight_style)
17 - :ghpull:`14518` Make values public (_tb_highlight & _tb_highlight_style)
18 - :ghpull:`14515` Use environment variable to identify conda / mamba
18 - :ghpull:`14515` Use environment variable to identify conda / mamba
19
19
20
20
21 As usual you can find the full list of PRs on GitHub under `the 8.28
21 As usual you can find the full list of PRs on GitHub under `the 8.28
22 <https://github.com/ipython/ipython/milestone/135?closed=1>`__ milestone.
22 <https://github.com/ipython/ipython/milestone/135?closed=1>`__ milestone.
23
23
24 For something completely different
24 For something completely different
25 ----------------------------------
25 ----------------------------------
26
26
27 One of the first works of Science Fiction (`Frankenstein
27 One of the first works of Science Fiction (`Frankenstein
28 <https://en.wikipedia.org/wiki/Frankenstein>`__), was written by `Mary Shelley
28 <https://en.wikipedia.org/wiki/Frankenstein>`__), was written by `Mary Shelley
29 <https://en.wikipedia.org/wiki/Mary_Shelley>`__ when she was 18, before being
29 <https://en.wikipedia.org/wiki/Mary_Shelley>`__ when she was 18, before being
30 published in London on 1 January 1818 when she was 20. This is often overlooked,
30 published in London on 1 January 1818 when she was 20. This is often overlooked,
31 and the role of founders of science fiction attribute to Edgar Allan Poe and
31 and the role of founders of science fiction attribute to Edgar Allan Poe and
32 Jules Verne despite being published later.
32 Jules Verne despite being published later.
33
33
34 Thanks
34 Thanks
35 ------
35 ------
36
36
37 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
37 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
38 work on IPython and related libraries.
38 work on IPython and related libraries.
39
39
40
40
41 .. _version 8.27:
41 .. _version 8.27:
42
42
43 IPython 8.27
43 IPython 8.27
44 ============
44 ============
45
45
46 New release of IPython after a month off (not enough changes). We can see a few
46 New release of IPython after a month off (not enough changes). We can see a few
47 important changes for this release.
47 important changes for this release.
48
48
49 - autocall was beeing call getitem, :ghpull:`14486`
49 - autocall was being call getitem, :ghpull:`14486`
50 - Only copy files in startup dir if we just created it. :ghpull:`14497`
50 - Only copy files in startup dir if we just created it. :ghpull:`14497`
51 - Fix some tests on Python 3.13 RC1 :ghpull:`14504`; this one I guess make this
51 - Fix some tests on Python 3.13 RC1 :ghpull:`14504`; this one I guess make this
52 the first IPython release officially compatible with Python 3.13; you will
52 the first IPython release officially compatible with Python 3.13; you will
53 need the most recent ``executing`` and ``stack_data``, we won't pin to avoid
53 need the most recent ``executing`` and ``stack_data``, we won't pin to avoid
54 forcing user of older Python version to upgrade.
54 forcing user of older Python version to upgrade.
55
55
56
56
57 As usual you can find the full list of PRs on GitHub under `the 8.27
57 As usual you can find the full list of PRs on GitHub under `the 8.27
58 <https://github.com/ipython/ipython/milestone/134?closed=1>`__ milestone.
58 <https://github.com/ipython/ipython/milestone/134?closed=1>`__ milestone.
59
59
60 Thanks
60 Thanks
61 ------
61 ------
62
62
63 Many thanks to `@Kleirre <https://github.com/Kleirre>`__ our June intern for
63 Many thanks to `@Kleirre <https://github.com/Kleirre>`__ our June intern for
64 doing her first contribution to open source, doing the releases notes and
64 doing her first contribution to open source, doing the releases notes and
65 release. I guess you didn't even notice it was not me who released :-). I wish
65 release. I guess you didn't even notice it was not me who released :-). I wish
66 her all the best in her future endeavor and look forward for her work in
66 her all the best in her future endeavor and look forward for her work in
67 astrophysics.
67 astrophysics.
68
68
69 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
69 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
70 work on IPython and related libraries.
70 work on IPython and related libraries.
71
71
72 .. _version 8.26:
72 .. _version 8.26:
73
73
74 IPython 8.26
74 IPython 8.26
75 ============
75 ============
76
76
77 Hey, the release of IPython for this month is here! (I know you were waiting for it)
77 Hey, the release of IPython for this month is here! (I know you were waiting for it)
78
78
79 - :ghpull:`14453` bugfix for call to structured_traceback
79 - :ghpull:`14453` bugfix for call to structured_traceback
80
80
81 - :ghpull:`14466` fixed honoring custom repr for NamedTuple if assigned by partialmethod
81 - :ghpull:`14466` fixed honoring custom repr for NamedTuple if assigned by partialmethod
82
82
83 - :ghpull:`14451` Convert matplotlib gui name in enable_gui
83 - :ghpull:`14451` Convert matplotlib gui name in enable_gui
84
84
85 As usual you can find the full list of PRs on GitHub under `the 8.26
85 As usual you can find the full list of PRs on GitHub under `the 8.26
86 <https://github.com/ipython/ipython/milestone/133?closed=1>`__ milestone.
86 <https://github.com/ipython/ipython/milestone/133?closed=1>`__ milestone.
87
87
88 Thanks
88 Thanks
89 ------
89 ------
90
90
91 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
91 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
92 work on IPython and related libraries.
92 work on IPython and related libraries.
93
93
94
94
95 .. _version 8.25:
95 .. _version 8.25:
96
96
97 IPython 8.25
97 IPython 8.25
98 ============
98 ============
99
99
100 Mostly internal changes for this end of may release of IPython.
100 Mostly internal changes for this end of may release of IPython.
101
101
102 We'll count about a dozen PRs for this moth, with small bugfixes related to
102 We'll count about a dozen PRs for this moth, with small bugfixes related to
103 matplotlib fixes.
103 matplotlib fixes.
104
104
105 Of notable interest,
105 Of notable interest,
106
106
107 - :ghpull:`14426` replaces the unicode micro symbol with greek letter mu,
107 - :ghpull:`14426` replaces the unicode micro symbol with greek letter mu,
108 visually identical but should fix nfkc normalisations issues.
108 visually identical but should fix nfkc normalisations issues.
109
109
110 - :ghpull:`14444` introduces ``intersphinx_registry`` as a new dependency
110 - :ghpull:`14444` introduces ``intersphinx_registry`` as a new dependency
111 which is recommended only to build documentation.
111 which is recommended only to build documentation.
112
112
113 As usual you can find the full list of PRs on GitHub under `the 8.25
113 As usual you can find the full list of PRs on GitHub under `the 8.25
114 <https://github.com/ipython/ipython/milestone/132?closed=1>`__ milestone.
114 <https://github.com/ipython/ipython/milestone/132?closed=1>`__ milestone.
115
115
116 Thanks
116 Thanks
117 ------
117 ------
118
118
119 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
119 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
120 work on IPython and related libraries.
120 work on IPython and related libraries.
121
121
122
122
123 .. _version 8.24:
123 .. _version 8.24:
124
124
125 IPython 8.24
125 IPython 8.24
126 ============
126 ============
127
127
128 Back on regular release schedule, as usual month releases are relatively tiny.
128 Back on regular release schedule, as usual month releases are relatively tiny.
129
129
130 The biggest change is the move of the matplotlib backend handling from IPython
130 The biggest change is the move of the matplotlib backend handling from IPython
131 to matplotlib. :ghpull:`14371` :ghpull:`14403`.
131 to matplotlib. :ghpull:`14371` :ghpull:`14403`.
132
132
133 We will note:
133 We will note:
134
134
135 - pytest 8 compatibility :ghpull:`14413`
135 - pytest 8 compatibility :ghpull:`14413`
136 - ``typing-extension`` now needs 4.6 or newer. It was already the case, but not
136 - ``typing-extension`` now needs 4.6 or newer. It was already the case, but not
137 explicated. :ghpull:`14380`
137 explicated. :ghpull:`14380`
138 - Attempt to speed running code under debugger in some cases. :ghpull:`14386`
138 - Attempt to speed running code under debugger in some cases. :ghpull:`14386`
139 :ghpull:`14418`.
139 :ghpull:`14418`.
140 - Multiple fixes to documentation for ipyparallel, simple_prompt and emacs
140 - Multiple fixes to documentation for ipyparallel, simple_prompt and emacs
141 :ghpull:`14384` :ghpull:`14404` :ghpull:`14407`
141 :ghpull:`14384` :ghpull:`14404` :ghpull:`14407`
142 - Maintenance and cleanup of debugger :ghpull:`14387` :ghpull:`14393`
142 - Maintenance and cleanup of debugger :ghpull:`14387` :ghpull:`14393`
143
143
144 As usual you can find the full list of PRs on GitHub under `the 8.24
144 As usual you can find the full list of PRs on GitHub under `the 8.24
145 <https://github.com/ipython/ipython/milestone/131?closed=1>`__ milestone.
145 <https://github.com/ipython/ipython/milestone/131?closed=1>`__ milestone.
146
146
147 Thanks
147 Thanks
148 ------
148 ------
149
149
150 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
150 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
151 work on IPython and related libraries.
151 work on IPython and related libraries.
152
152
153
153
154 .. _version 8.23:
154 .. _version 8.23:
155
155
156 IPython 8.23
156 IPython 8.23
157 ============
157 ============
158
158
159 Super tiny release of IPython on Sunday – a bit later than usual, which is also
159 Super tiny release of IPython on Sunday – a bit later than usual, which is also
160 `πŸ³οΈβ€βš§οΈ International Transgender Day of VisibilityπŸ³οΈβ€βš§οΈ
160 `πŸ³οΈβ€βš§οΈ International Transgender Day of VisibilityπŸ³οΈβ€βš§οΈ
161 <https://en.wikipedia.org/wiki/International_Transgender_Day_of_Visibility>`_ –
161 <https://en.wikipedia.org/wiki/International_Transgender_Day_of_Visibility>`_ –
162 so a though for you on this day, you matter and you are valid [1]_.
162 so a though for you on this day, you matter and you are valid [1]_.
163
163
164 This is a minuscule release with only 5 Pull requests.
164 This is a minuscule release with only 5 Pull requests.
165
165
166 Main change is :ghpull:`14357` which improve inference from return type
166 Main change is :ghpull:`14357` which improve inference from return type
167 annotations in completer and the introduction of the optional target
167 annotations in completer and the introduction of the optional target
168 ``ipython[matplotlib]`` to explicitly request the matplotlib optional
168 ``ipython[matplotlib]`` to explicitly request the matplotlib optional
169 dependencies.
169 dependencies.
170
170
171 As usual you can find the full list of PRs on GitHub under `the 8.23
171 As usual you can find the full list of PRs on GitHub under `the 8.23
172 <https://github.com/ipython/ipython/milestone/130?closed=1>`__ milestone.
172 <https://github.com/ipython/ipython/milestone/130?closed=1>`__ milestone.
173
173
174 Thanks
174 Thanks
175 ------
175 ------
176
176
177 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
177 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
178 work on IPython and related libraries.
178 work on IPython and related libraries.
179
179
180
180
181 .. _version 8.22:
181 .. _version 8.22:
182
182
183 IPython 8.22, 8.22.1 and 8.22.2
183 IPython 8.22, 8.22.1 and 8.22.2
184 ===============================
184 ===============================
185
185
186 Quick release of IPython for this short month of February, with quite a bit of
186 Quick release of IPython for this short month of February, with quite a bit of
187 activity with more than 15 PRs.
187 activity with more than 15 PRs.
188
188
189 I am not going to details all the changes, but among other we have :
189 I am not going to details all the changes, but among other we have :
190
190
191 - More compatibility with emscripten :ghpull:`14316`, :ghpull:`14318`,
191 - More compatibility with emscripten :ghpull:`14316`, :ghpull:`14318`,
192 - Test more downstream project to avoid breakage :ghpull:`14317`
192 - Test more downstream project to avoid breakage :ghpull:`14317`
193 - Fix recently introduced bug with the ``store`` magic.
193 - Fix recently introduced bug with the ``store`` magic.
194 - Fix issues with multiple call to ``matplotlib.pyplot.switch_backend``
194 - Fix issues with multiple call to ``matplotlib.pyplot.switch_backend``
195 - Fix crashing IPython when some tracebacks encounter dynamically evaluated
195 - Fix crashing IPython when some tracebacks encounter dynamically evaluated
196 code.
196 code.
197
197
198 IPython 8.22.1 increase the minimal traitlets version, and 8.22.2 fix a critical
198 IPython 8.22.1 increase the minimal traitlets version, and 8.22.2 fix a critical
199 bug on emscripten preventing to use some magics like ``%matplotlib`` on
199 bug on emscripten preventing to use some magics like ``%matplotlib`` on
200 jupyter-light.
200 jupyter-light.
201
201
202 API changes
202 API changes
203 -----------
203 -----------
204
204
205 One of the largest change is the update the mimehooks and inspector API, see
205 One of the largest change is the update the mimehooks and inspector API, see
206 :ghpull:`14342`. It should be backward compatible, but many hooks now receive a
206 :ghpull:`14342`. It should be backward compatible, but many hooks now receive a
207 single object with many fields allowing us flexibility to update the API later.
207 single object with many fields allowing us flexibility to update the API later.
208
208
209
209
210 Packaging changes
210 Packaging changes
211 -----------------
211 -----------------
212
212
213 Thanks to `@mkoppe <https://github.com/mkoeppe>`__, we are slowly getting rid of
213 Thanks to `@mkoppe <https://github.com/mkoeppe>`__, we are slowly getting rid of
214 setup.py finally migrating to ``pyproject.toml``. There is still quite a bit of
214 setup.py finally migrating to ``pyproject.toml``. There is still quite a bit of
215 work, and please open an issue if you encounter any problem.
215 work, and please open an issue if you encounter any problem.
216
216
217
217
218 Deprecation
218 Deprecation
219 -----------
219 -----------
220
220
221 A number of unused functions have been marked deprecated or pending deprecation.
221 A number of unused functions have been marked deprecated or pending deprecation.
222 Please let us know if you encounter any of those deprecation messages for us to
222 Please let us know if you encounter any of those deprecation messages for us to
223 adjust the removal timeline.
223 adjust the removal timeline.
224
224
225
225
226 Thanks
226 Thanks
227 ------
227 ------
228
228
229 Many thanks to `@mkoppe <https://github.com/mkoeppe>`__ and `@krassowski
229 Many thanks to `@mkoppe <https://github.com/mkoeppe>`__ and `@krassowski
230 <https://github.com/krassowski>`__ for their multiple contributions and codebase
230 <https://github.com/krassowski>`__ for their multiple contributions and codebase
231 cleanup.
231 cleanup.
232
232
233 As usual you can find the full list of PRs on GitHub under `the 8.22
233 As usual you can find the full list of PRs on GitHub under `the 8.22
234 <https://github.com/ipython/ipython/milestone/129?closed=1>`__ milestone.
234 <https://github.com/ipython/ipython/milestone/129?closed=1>`__ milestone.
235
235
236 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
236 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
237 work on IPython and related libraries.
237 work on IPython and related libraries.
238
238
239
239
240 .. _version 8.21:
240 .. _version 8.21:
241
241
242 IPython 8.21
242 IPython 8.21
243 ------------
243 ------------
244
244
245 More substantial release of IPython slightly out of schedule as it was not
245 More substantial release of IPython slightly out of schedule as it was not
246 possible for me to make a release last Friday.
246 possible for me to make a release last Friday.
247
247
248 Few new features are present, but the codebase has been cleaned, and a couple
248 Few new features are present, but the codebase has been cleaned, and a couple
249 of API are _considered_ for deprecation. They are not deprecated yet, but as
249 of API are _considered_ for deprecation. They are not deprecated yet, but as
250 they do not seem to be quite used, they may emit a warning, in which case please
250 they do not seem to be quite used, they may emit a warning, in which case please
251 comment on the relevant issue to inform me of _which_ project use those feature
251 comment on the relevant issue to inform me of _which_ project use those feature
252 and how you use them. Depending on the feedback I might change the timeline for
252 and how you use them. Depending on the feedback I might change the timeline for
253 deprecation.
253 deprecation.
254
254
255 This release saw 14 PRs, with more outside contribution than usual,
255 This release saw 14 PRs, with more outside contribution than usual,
256 I'll note in particular PRs related to making IPython work on emscripten.
256 I'll note in particular PRs related to making IPython work on emscripten.
257
257
258 I also want to point that we are _trying_ to keep compatibility with Python 3.13,
258 I also want to point that we are _trying_ to keep compatibility with Python 3.13,
259 but it's a cat and mouse game. Plus I am low on time, so I would appreciate any
259 but it's a cat and mouse game. Plus I am low on time, so I would appreciate any
260 help with that.
260 help with that.
261
261
262 Deprecations
262 Deprecations
263 ~~~~~~~~~~~~
263 ~~~~~~~~~~~~
264
264
265 - :ghpull:`14307` Pending Deprecation of
265 - :ghpull:`14307` Pending Deprecation of
266 ``ColorSchemeTable.set_active_scheme(...)``'s ``case_sensitive`` Parameter.
266 ``ColorSchemeTable.set_active_scheme(...)``'s ``case_sensitive`` Parameter.
267 - :ghpull:`14305` Pending Deprecation of constructing ``ColorScheme`` via
267 - :ghpull:`14305` Pending Deprecation of constructing ``ColorScheme`` via
268 ``kwargs``, in favor passing a single dict.
268 ``kwargs``, in favor passing a single dict.
269
269
270
270
271 Fixes
271 Fixes
272 ~~~~~
272 ~~~~~
273
273
274 - :ghpull:`14284` TerminalIPythonApp's would warn that ``auto_create`` option is not
274 - :ghpull:`14284` TerminalIPythonApp's would warn that ``auto_create`` option is not
275 recognized.
275 recognized.
276 - :ghpull:`14286` Fix a crash with ``NotOneValueFound`` when rendering complex
276 - :ghpull:`14286` Fix a crash with ``NotOneValueFound`` when rendering complex
277 tracebacks.
277 tracebacks.
278
278
279 - :ghpull:`14287` Partial Python 3.13 compatibility
279 - :ghpull:`14287` Partial Python 3.13 compatibility
280 - :ghpull:`14290` Docs/Typos.
280 - :ghpull:`14290` Docs/Typos.
281
281
282 Changes
282 Changes
283 ~~~~~~~
283 ~~~~~~~
284
284
285 - :ghpull:`14289` ``ipdb.set_trace()`` now accepts ``header=`` for better
285 - :ghpull:`14289` ``ipdb.set_trace()`` now accepts ``header=`` for better
286 compatibility with ``pdb.set_trace()``
286 compatibility with ``pdb.set_trace()``
287
287
288 - :ghpull:`14300` and :ghpull:`14301` Add hooking ability to produce
288 - :ghpull:`14300` and :ghpull:`14301` Add hooking ability to produce
289 mimebundle.
289 mimebundle.
290
290
291 We'll outline :ghpull:`14300`, it is now possible to extend the ``?/??``
291 We'll outline :ghpull:`14300`, it is now possible to extend the ``?/??``
292 operator to return more mimetypes to render richer help in frontends that
292 operator to return more mimetypes to render richer help in frontends that
293 support it. In particular you could send a json representation of the help that
293 support it. In particular you could send a json representation of the help that
294 could be displayed in a customizable way.
294 could be displayed in a customizable way.
295
295
296 Miscellaneous
296 Miscellaneous
297 ~~~~~~~~~~~~~
297 ~~~~~~~~~~~~~
298
298
299 - :ghpull:`14291` Misc Refactor of Color handling
299 - :ghpull:`14291` Misc Refactor of Color handling
300 - :ghpull:`14295` Misc test skip on problematic Pypy versions.
300 - :ghpull:`14295` Misc test skip on problematic Pypy versions.
301
301
302
302
303 Thanks
303 Thanks
304 ~~~~~~
304 ~~~~~~
305
305
306 Special thanks to all our contributors, and to the Pypy team that was extremely
306 Special thanks to all our contributors, and to the Pypy team that was extremely
307 reactive in helping to investigate a fixing a rare unicode+windows bug.
307 reactive in helping to investigate a fixing a rare unicode+windows bug.
308
308
309 As usual you can find the full list of PRs on GitHub under `the 8.21
309 As usual you can find the full list of PRs on GitHub under `the 8.21
310 <https://github.com/ipython/ipython/milestone/128?closed=1>`__ milestone.
310 <https://github.com/ipython/ipython/milestone/128?closed=1>`__ milestone.
311
311
312 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
312 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
313 work on IPython and related libraries.
313 work on IPython and related libraries.
314
314
315
315
316 .. _version 8.20:
316 .. _version 8.20:
317
317
318 IPython 8.20
318 IPython 8.20
319 ------------
319 ------------
320
320
321 Quick IPython release in this beginning of 2024, barely 2 weeks after the previous
321 Quick IPython release in this beginning of 2024, barely 2 weeks after the previous
322 release.
322 release.
323
323
324 This is mostly to fix a backward compatibility issue, I would have done a patch
324 This is mostly to fix a backward compatibility issue, I would have done a patch
325 release earlier if I could. As a few other cleanup are also part of this
325 release earlier if I could. As a few other cleanup are also part of this
326 release, this will get a minor version bump.
326 release, this will get a minor version bump.
327
327
328
328
329 The crux of this release is :ghpull:`14274` (Inspect continuation prompt
329 The crux of this release is :ghpull:`14274` (Inspect continuation prompt
330 signature and pass only viable arguments), the rest of the changes are mostly
330 signature and pass only viable arguments), the rest of the changes are mostly
331 type annotation, and a few compatibility issues with Python 3.13 that are
331 type annotation, and a few compatibility issues with Python 3.13 that are
332 getting addressed.
332 getting addressed.
333
333
334 Python 3.13 compatibility is still not complete (help welcomed).
334 Python 3.13 compatibility is still not complete (help welcomed).
335
335
336 As usual you can find the full list of PRs on GitHub under `the 8.20
336 As usual you can find the full list of PRs on GitHub under `the 8.20
337 <https://github.com/ipython/ipython/milestone/127?closed=1>`__ milestone.
337 <https://github.com/ipython/ipython/milestone/127?closed=1>`__ milestone.
338
338
339 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
339 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
340 work on IPython and related libraries.
340 work on IPython and related libraries.
341
341
342
342
343 .. _version 8.19:
343 .. _version 8.19:
344
344
345 IPython 8.19
345 IPython 8.19
346 ------------
346 ------------
347
347
348 New release of IPython a bit before the end of the month, and end of the year.
348 New release of IPython a bit before the end of the month, and end of the year.
349
349
350 Mostly cleanup and deprecation, due to upstream deprecation and removal.
350 Mostly cleanup and deprecation, due to upstream deprecation and removal.
351
351
352 Remove of Python 3.9 support
352 Remove of Python 3.9 support
353 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
353 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
354
354
355 A bit later than originally plan, IPython 8.19 does not support Python 3.9
355 A bit later than originally plan, IPython 8.19 does not support Python 3.9
356 anymore, as well as the few conditional code that were executing only on Python
356 anymore, as well as the few conditional code that were executing only on Python
357 3.9. :ghpull:`14254`
357 3.9. :ghpull:`14254`
358
358
359 We used the opportunity to deprecate ``IPython.utils.tz`` :ghpull:`14256`, due
359 We used the opportunity to deprecate ``IPython.utils.tz`` :ghpull:`14256`, due
360 to upstream deprecation of some timezone utilities. It will be removed at a later
360 to upstream deprecation of some timezone utilities. It will be removed at a later
361 date.
361 date.
362
362
363 We now also run CI on Python 3.12 (what I likely should have done before), but
363 We now also run CI on Python 3.12 (what I likely should have done before), but
364 running on too many Python version uses a lot of CI time.
364 running on too many Python version uses a lot of CI time.
365
365
366 Absolute and relative Line Numbers in Prompts
366 Absolute and relative Line Numbers in Prompts
367 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
367 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
368
368
369 Thanks to the contribution of ``cohml``, IPython CLI now support absolute and
369 Thanks to the contribution of ``cohml``, IPython CLI now support absolute and
370 relative line numbers in both vi and emacs prompt, use for example
370 relative line numbers in both vi and emacs prompt, use for example
371 ``c.TerminalInteractiveShell.prompt_line_number_format='{line: 4d}/{rel_line:+03d} | '``
371 ``c.TerminalInteractiveShell.prompt_line_number_format='{line: 4d}/{rel_line:+03d} | '``
372 configuration option to display both in a custom format.
372 configuration option to display both in a custom format.
373
373
374 Miscellaneous
374 Miscellaneous
375 ~~~~~~~~~~~~~
375 ~~~~~~~~~~~~~
376
376
377 In addition to various bugfixes, I unpinned pytest, let me know if there are any
377 In addition to various bugfixes, I unpinned pytest, let me know if there are any
378 issues and we'll re-pin.
378 issues and we'll re-pin.
379
379
380 See you in 2024
380 See you in 2024
381 ~~~~~~~~~~~~~~~
381 ~~~~~~~~~~~~~~~
382
382
383 As usual you can find the full list of PRs on GitHub under `the 8.19
383 As usual you can find the full list of PRs on GitHub under `the 8.19
384 <https://github.com/ipython/ipython/milestone/126?closed=1>`__ milestone.
384 <https://github.com/ipython/ipython/milestone/126?closed=1>`__ milestone.
385
385
386 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
386 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
387 work on IPython and related libraries.
387 work on IPython and related libraries.
388
388
389 .. _version 8.18:
389 .. _version 8.18:
390
390
391 IPython 8.18 and 8.18.1
391 IPython 8.18 and 8.18.1
392 -----------------------
392 -----------------------
393
393
394 8.18.1 is identical to 8.18 but pin ``prompt_toolkit`` to greater than ``3.0.41``
394 8.18.1 is identical to 8.18 but pin ``prompt_toolkit`` to greater than ``3.0.41``
395
395
396 Small release of IPython that fixes a small number of inconveniences.
396 Small release of IPython that fixes a small number of inconveniences.
397
397
398 - :ghpull:`14251` Fix a memory leak in qt event loop integration by setting
398 - :ghpull:`14251` Fix a memory leak in qt event loop integration by setting
399 the Loop parent to None.
399 the Loop parent to None.
400 - :ghpull:`14252` Pickleshare was made an optional dependency in 8.17, this
400 - :ghpull:`14252` Pickleshare was made an optional dependency in 8.17, this
401 leads to warnings in some installations when using modules completions. The
401 leads to warnings in some installations when using modules completions. The
402 warning has been silenced.
402 warning has been silenced.
403 - :ghpull:`14241` Update event loop code for compatibility with more recent
403 - :ghpull:`14241` Update event loop code for compatibility with more recent
404 ``prompt_toolkit`` due to deprecations in Python 3.12.
404 ``prompt_toolkit`` due to deprecations in Python 3.12.
405 - :ghpull:`14245` Fix doc example on Pygments styles
405 - :ghpull:`14245` Fix doc example on Pygments styles
406 - :ghpull:`14238` Remove dependency on app_nope, this is actually only a
406 - :ghpull:`14238` Remove dependency on app_nope, this is actually only a
407 dependency of IPykernel.
407 dependency of IPykernel.
408
408
409 As usual you can find the full list of PRs on GitHub under `the 8.18
409 As usual you can find the full list of PRs on GitHub under `the 8.18
410 <https://github.com/ipython/ipython/milestone/125?closed=1>`__ milestone.
410 <https://github.com/ipython/ipython/milestone/125?closed=1>`__ milestone.
411
411
412 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
412 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
413 work on IPython and related libraries.
413 work on IPython and related libraries.
414
414
415 .. _version 8.17.1:
415 .. _version 8.17.1:
416 .. _version 8.17:
416 .. _version 8.17:
417
417
418 IPython 8.17, 8.17.1
418 IPython 8.17, 8.17.1
419 --------------------
419 --------------------
420
420
421 Medium-sized release of IPython that includes some cleanup (backcall, python2 leftovers)
421 Medium-sized release of IPython that includes some cleanup (backcall, python2 leftovers)
422 and some refactoring improvements (typing, pathlib) and a fix on completion.
422 and some refactoring improvements (typing, pathlib) and a fix on completion.
423
423
424 - :ghpull:`14216` remove backcall dependency
424 - :ghpull:`14216` remove backcall dependency
425 - :ghpull:`14217` make pickleshare dependency optional
425 - :ghpull:`14217` make pickleshare dependency optional
426 - :ghpull:`14185` support completion based on type annotations of calls
426 - :ghpull:`14185` support completion based on type annotations of calls
427
427
428 Reverted in 8.17.1:
428 Reverted in 8.17.1:
429
429
430 - :ghpull:`14190` remove support for python 2 in lexers (reverted in 8.17.1 as it is imported by qtconsole/spyder)
430 - :ghpull:`14190` remove support for python 2 in lexers (reverted in 8.17.1 as it is imported by qtconsole/spyder)
431
431
432
432
433 Mamba and Micromamba magic commands
433 Mamba and Micromamba magic commands
434 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
434 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
435
435
436 In addition to the ``%conda`` magic command for calling ``conda`` in IPython,
436 In addition to the ``%conda`` magic command for calling ``conda`` in IPython,
437 the ``%mamba`` and ``%micromamba`` magic commands now
437 the ``%mamba`` and ``%micromamba`` magic commands now
438 call ``mamba`` and ``micromamba`` if they are on ``sys.path``.
438 call ``mamba`` and ``micromamba`` if they are on ``sys.path``.
439
439
440 .. code::
440 .. code::
441
441
442 %mamba install pkgname
442 %mamba install pkgname
443 %micromamba install pkgname
443 %micromamba install pkgname
444 %conda install pkgname
444 %conda install pkgname
445 %pip install pkgname
445 %pip install pkgname
446
446
447 %mamba --help
447 %mamba --help
448 %micromamba --help
448 %micromamba --help
449 %conda --help
449 %conda --help
450 %pip --help # works w/ JupyterLite
450 %pip --help # works w/ JupyterLite
451 !pip --help
451 !pip --help
452
452
453
453
454 :ghpull:`14191`
454 :ghpull:`14191`
455
455
456 ----
456 ----
457
457
458 As usual you can find the full list of PRs on GitHub under `the 8.17
458 As usual you can find the full list of PRs on GitHub under `the 8.17
459 <https://github.com/ipython/ipython/milestone/123?closed=1>`__ milestone.
459 <https://github.com/ipython/ipython/milestone/123?closed=1>`__ milestone.
460
460
461 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
461 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
462 work on IPython and related libraries.
462 work on IPython and related libraries.
463
463
464 .. _version 8.16:
464 .. _version 8.16:
465 .. _version 8.16.1:
465 .. _version 8.16.1:
466
466
467 IPython 8.16, 8.16.1
467 IPython 8.16, 8.16.1
468 --------------------
468 --------------------
469
469
470 Small double release of IPython (with the 8.12.3 release notes just below).
470 Small double release of IPython (with the 8.12.3 release notes just below).
471 Mostly bug fixes and cleanups, and type annotations. Of interest for users:
471 Mostly bug fixes and cleanups, and type annotations. Of interest for users:
472
472
473 - :ghpull:`14153` Fix a bug of the new iPdb chained traceback where some
473 - :ghpull:`14153` Fix a bug of the new iPdb chained traceback where some
474 Exception would not have any traceback. (see upstream fix in CPython for more
474 Exception would not have any traceback. (see upstream fix in CPython for more
475 details).
475 details).
476 - :ghpull:`14168` Fix case with spurious message about event loops when using
476 - :ghpull:`14168` Fix case with spurious message about event loops when using
477 matplotlib.
477 matplotlib.
478
478
479 This PR is in 8.16.0 but reverted in 8.16.1, we'll rework the fix for 8.17
479 This PR is in 8.16.0 but reverted in 8.16.1, we'll rework the fix for 8.17
480
480
481 - :ghpull:`14163` Fix an error where semicolon would not suppress output.
481 - :ghpull:`14163` Fix an error where semicolon would not suppress output.
482
482
483 As usual you can find the full list of PRs on GitHub under `the 8.16
483 As usual you can find the full list of PRs on GitHub under `the 8.16
484 <https://github.com/ipython/ipython/milestone/121?closed=1>`__ and `8.16.1 milestone
484 <https://github.com/ipython/ipython/milestone/121?closed=1>`__ and `8.16.1 milestone
485 <https://github.com/ipython/ipython/milestone/124?closed=1>`__.
485 <https://github.com/ipython/ipython/milestone/124?closed=1>`__.
486
486
487 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
487 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
488 work on IPython and related libraries.
488 work on IPython and related libraries.
489
489
490 .. _version 8.12.3:
490 .. _version 8.12.3:
491
491
492 IPython 8.12.3
492 IPython 8.12.3
493 --------------
493 --------------
494
494
495 Tiny release of 8.12.3 that backport a small number of fixes for users still
495 Tiny release of 8.12.3 that backport a small number of fixes for users still
496 using Python 3.8.
496 using Python 3.8.
497
497
498 - :ghpull:`14080` add passthrough filter shortcuts
498 - :ghpull:`14080` add passthrough filter shortcuts
499 - :ghpull:`14169` Fix `InteractiveShellEmbed`
499 - :ghpull:`14169` Fix `InteractiveShellEmbed`
500
500
501 .. _version 8.15:
501 .. _version 8.15:
502
502
503 IPython 8.15
503 IPython 8.15
504 ------------
504 ------------
505
505
506 Medium release of IPython after a couple of month hiatus, and a bit
506 Medium release of IPython after a couple of month hiatus, and a bit
507 off-schedule.
507 off-schedule.
508
508
509 Among other, IPython 8.15:
509 Among other, IPython 8.15:
510
510
511 - Improve compatibility with future version of Python 3.12/3.13
511 - Improve compatibility with future version of Python 3.12/3.13
512 :ghpull:`14107`, :ghpull:`14139`,
512 :ghpull:`14107`, :ghpull:`14139`,
513 - Improve support for ``ExceptionGroups``, :ghpull:`14108`
513 - Improve support for ``ExceptionGroups``, :ghpull:`14108`
514 - Fix hangs in ``%gui osx``, :ghpull:`14125`
514 - Fix hangs in ``%gui osx``, :ghpull:`14125`
515 - Fix memory lead with ``%reset``, :ghpull:`14133`
515 - Fix memory lead with ``%reset``, :ghpull:`14133`
516 - Unstable config option to modify traceback highlighting that is sometime hard
516 - Unstable config option to modify traceback highlighting that is sometime hard
517 to read :ghpull:`14138`
517 to read :ghpull:`14138`
518 - Support ``.`` in ``ipdb`` as an argument to the ``list`` command
518 - Support ``.`` in ``ipdb`` as an argument to the ``list`` command
519 :ghpull:`14121`
519 :ghpull:`14121`
520 - Workroud ``parso`` showing warning message when the default logger level is
520 - Workroud ``parso`` showing warning message when the default logger level is
521 changed :ghpull:`14119`
521 changed :ghpull:`14119`
522 - Fix multiple issues with matplotlib interactive mode, qt5/qt6 :ghpull:`14128`
522 - Fix multiple issues with matplotlib interactive mode, qt5/qt6 :ghpull:`14128`
523
523
524 Support for PEP-678 Exception Notes
524 Support for PEP-678 Exception Notes
525 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
525 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
526
526
527 Ultratb now shows :pep:`678` notes, improving your debugging experience on
527 Ultratb now shows :pep:`678` notes, improving your debugging experience on
528 Python 3.11+ or with libraries such as Pytest and Hypothesis.
528 Python 3.11+ or with libraries such as Pytest and Hypothesis.
529
529
530 Native fallback for displaying ExceptionGroup
530 Native fallback for displaying ExceptionGroup
531 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
531 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
532 ExceptionGroups are now displayed with ``traceback.print_exc``, as a temporary fix until UltraTB properly supports displaying child exceptions.
532 ExceptionGroups are now displayed with ``traceback.print_exc``, as a temporary fix until UltraTB properly supports displaying child exceptions.
533
533
534
534
535 We have two larger features:
535 We have two larger features:
536
536
537 AST-based macros
537 AST-based macros
538 ~~~~~~~~~~~~~~~~
538 ~~~~~~~~~~~~~~~~
539
539
540 :ghpull:`14100` introduce a new and efficient way to modify each execution block
540 :ghpull:`14100` introduce a new and efficient way to modify each execution block
541 (cell) using an template-ast-based transform. Unlike IPython pre and post code
541 (cell) using an template-ast-based transform. Unlike IPython pre and post code
542 execution hooks, this actually transform the code that is execute with as
542 execution hooks, this actually transform the code that is execute with as
543 minimal as possible overhead. While it was already technically possible to
543 minimal as possible overhead. While it was already technically possible to
544 register ast transformers for IPython this was far from evident.
544 register ast transformers for IPython this was far from evident.
545
545
546 This should make it trivial to hook into IPython to implement custom hooks, that
546 This should make it trivial to hook into IPython to implement custom hooks, that
547 for example time or profile your code, catch exceptions to provide error
547 for example time or profile your code, catch exceptions to provide error
548 messages for students or do any other kind of transformations.
548 messages for students or do any other kind of transformations.
549
549
550 In addition to programmatic API there is also a magic to quickly register
550 In addition to programmatic API there is also a magic to quickly register
551 hooks::
551 hooks::
552
552
553 In [1]: %%code_wrap before_after
553 In [1]: %%code_wrap before_after
554 ...: print('before')
554 ...: print('before')
555 ...: __code__
555 ...: __code__
556 ...: print('after')
556 ...: print('after')
557 ...: __ret__
557 ...: __ret__
558
558
559 This mean that for any subsequent execution code will be executed.
559 This mean that for any subsequent execution code will be executed.
560 You can modify the above to print the date, compute the execution time,
560 You can modify the above to print the date, compute the execution time,
561 retry the code in a for loop....
561 retry the code in a for loop....
562
562
563
563
564 Allow IPdb/Pdb to move between chained exceptions
564 Allow IPdb/Pdb to move between chained exceptions
565 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
565 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
566
566
567 The main change is the addition of the ability to move between chained
567 The main change is the addition of the ability to move between chained
568 exceptions when using IPdb, this feature was also contributed to upstream Pdb
568 exceptions when using IPdb, this feature was also contributed to upstream Pdb
569 and is thus native to CPython in Python 3.13+ Though ipdb should support this
569 and is thus native to CPython in Python 3.13+ Though ipdb should support this
570 feature in older version of Python. I invite you to look at the `CPython changes
570 feature in older version of Python. I invite you to look at the `CPython changes
571 and docs <https://github.com/python/cpython/pull/106676>`__ for more details.
571 and docs <https://github.com/python/cpython/pull/106676>`__ for more details.
572
572
573 In short, once in post-mortem debugger (``%debug``), you can use the ipdb
573 In short, once in post-mortem debugger (``%debug``), you can use the ipdb
574 ``exceptions`` command to switch exceptions, for example:
574 ``exceptions`` command to switch exceptions, for example:
575
575
576 .. code-block:: ipython
576 .. code-block:: ipython
577
577
578 In [1]: def foo(x):
578 In [1]: def foo(x):
579 ...: try:
579 ...: try:
580 ...: bar(x)
580 ...: bar(x)
581 ...: except Exception as e:
581 ...: except Exception as e:
582 ...: raise ValueError("foo (): bar failed") from e
582 ...: raise ValueError("foo (): bar failed") from e
583 ...:
583 ...:
584 ...: def bar(x):
584 ...: def bar(x):
585 ...: 1 / X
585 ...: 1 / X
586 ...:
586 ...:
587
587
588 In [2]: foo(0)
588 In [2]: foo(0)
589 ---------------------------------------------------------------------------
589 ---------------------------------------------------------------------------
590 NameError Traceback (most recent call last)
590 NameError Traceback (most recent call last)
591 Cell In[1], line 3, in foo(x)
591 Cell In[1], line 3, in foo(x)
592 2 try:
592 2 try:
593 ----> 3 bar(x)
593 ----> 3 bar(x)
594 4 except Exception as e:
594 4 except Exception as e:
595
595
596 Cell In[1], line 9, in bar(x)
596 Cell In[1], line 9, in bar(x)
597 8 def bar(x):
597 8 def bar(x):
598 ----> 9 1 / X
598 ----> 9 1 / X
599
599
600 NameError: name 'X' is not defined
600 NameError: name 'X' is not defined
601
601
602 The above exception was the direct cause of the following exception:
602 The above exception was the direct cause of the following exception:
603
603
604 ValueError Traceback (most recent call last)
604 ValueError Traceback (most recent call last)
605 Cell In[2], line 1
605 Cell In[2], line 1
606 ----> 1 foo(0)
606 ----> 1 foo(0)
607
607
608 Cell In[1], line 5, in foo(x)
608 Cell In[1], line 5, in foo(x)
609 3 bar(x)
609 3 bar(x)
610 4 except Exception as e:
610 4 except Exception as e:
611 ----> 5 raise ValueError("foo (): bar failed") from e
611 ----> 5 raise ValueError("foo (): bar failed") from e
612
612
613 ValueError: foo (): bar failed
613 ValueError: foo (): bar failed
614
614
615 In [3]: %debug
615 In [3]: %debug
616 > <ipython-input-1-b0bbdc271ffb>(5)foo()
616 > <ipython-input-1-b0bbdc271ffb>(5)foo()
617 3 bar(x)
617 3 bar(x)
618 4 except Exception as e:
618 4 except Exception as e:
619 ----> 5 raise ValueError("foo (): bar failed") from e
619 ----> 5 raise ValueError("foo (): bar failed") from e
620
620
621 In previous ipdb you could not go into the bar error, now from within pdb you
621 In previous ipdb you could not go into the bar error, now from within pdb you
622 can use ``exceptions``:
622 can use ``exceptions``:
623
623
624 .. code-block:: ipython
624 .. code-block:: ipython
625
625
626 ipdb> exceptions
626 ipdb> exceptions
627 0 NameError("name 'X' is not defined")
627 0 NameError("name 'X' is not defined")
628 > 1 ValueError('foo (): bar failed')
628 > 1 ValueError('foo (): bar failed')
629
629
630 ipdb> exceptions 0
630 ipdb> exceptions 0
631 > <ipython-input-1-b0bbdc271ffb>(9)bar()
631 > <ipython-input-1-b0bbdc271ffb>(9)bar()
632 6
632 6
633 7
633 7
634 8 def bar(x):
634 8 def bar(x):
635 ----> 9 1 / X
635 ----> 9 1 / X
636 10
636 10
637
637
638 ipdb>
638 ipdb>
639
639
640 In particular I want to thank the `D.E. Shaw group <https://www.deshaw.com/>`__
640 In particular I want to thank the `D.E. Shaw group <https://www.deshaw.com/>`__
641 for suggesting and funding the two largest feature as well as many bug fixes of
641 for suggesting and funding the two largest feature as well as many bug fixes of
642 this release.
642 this release.
643
643
644 As usual you can find the full list of PRs on GitHub under `the 8.15 milestone
644 As usual you can find the full list of PRs on GitHub under `the 8.15 milestone
645 <https://github.com/ipython/ipython/milestone/120?closed=1>`__.
645 <https://github.com/ipython/ipython/milestone/120?closed=1>`__.
646
646
647
647
648
648
649 .. _version 8.14:
649 .. _version 8.14:
650
650
651 IPython 8.14
651 IPython 8.14
652 ------------
652 ------------
653
653
654 Small release of IPython.
654 Small release of IPython.
655
655
656 - :ghpull:`14080` fixes some shortcuts issues.
656 - :ghpull:`14080` fixes some shortcuts issues.
657 - :ghpull:`14056` Add option to ``%autoreload`` to hide errors when reloading code. This will be the default for spyder
657 - :ghpull:`14056` Add option to ``%autoreload`` to hide errors when reloading code. This will be the default for spyder
658 user is my understanding.
658 user is my understanding.
659 - :ghpull:`14039` (and :ghpull:`14040`) to show exception notes in tracebacks.
659 - :ghpull:`14039` (and :ghpull:`14040`) to show exception notes in tracebacks.
660
660
661 - :ghpull:`14076` Add option to EventManager to prevent printing
661 - :ghpull:`14076` Add option to EventManager to prevent printing
662
662
663
663
664 SPEC 0 and SPEC 4
664 SPEC 0 and SPEC 4
665 ~~~~~~~~~~~~~~~~~
665 ~~~~~~~~~~~~~~~~~
666
666
667 You've heard about the NEPs, (NumPy enhancement Proposal), having a NEP for something non-numpy specific was sometime confusing.
667 You've heard about the NEPs, (NumPy enhancement Proposal), having a NEP for something non-numpy specific was sometime confusing.
668 Long live the `SPECs <https://scientific-python.org/specs/>`_.
668 Long live the `SPECs <https://scientific-python.org/specs/>`_.
669
669
670 We are now trying to follow SPEC 0 (aka old NEP 29) for support of upstream libraries.
670 We are now trying to follow SPEC 0 (aka old NEP 29) for support of upstream libraries.
671
671
672 We also now try to follow SPEC 4 (test and publish nightly on a centralized nightly repository).
672 We also now try to follow SPEC 4 (test and publish nightly on a centralized nightly repository).
673 We encourage you to do so as well in order to report breakage, and contribute to the SPEC process !
673 We encourage you to do so as well in order to report breakage, and contribute to the SPEC process !
674
674
675
675
676 Python 3.12 compatibility ?
676 Python 3.12 compatibility ?
677 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
677 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
678
678
679 Python 3.12 changed its tokenizer to have better support for f-strings and allow arbitrary expression.
679 Python 3.12 changed its tokenizer to have better support for f-strings and allow arbitrary expression.
680 This is a great new feature and performance improvement in Python 3.12.
680 This is a great new feature and performance improvement in Python 3.12.
681
681
682 Unfortunately this means the new tokenizer does not support incomplete or invalid Python which will
682 Unfortunately this means the new tokenizer does not support incomplete or invalid Python which will
683 break many features of IPython. Thus compatibility of IPython with Python 3.12 is not guarantied.
683 break many features of IPython. Thus compatibility of IPython with Python 3.12 is not guaranteed.
684 It is unclear to which extent IPython is affected, and whether we can/should try to still support magics, shell
684 It is unclear to which extent IPython is affected, and whether we can/should try to still support magics, shell
685 escape (``! ....``), ..., as well as how to do it if we can.
685 escape (``! ....``), ..., as well as how to do it if we can.
686
686
687 In addition even if we there is technical feasibility to do so, it is no clear we have the resources to do it.
687 In addition even if we there is technical feasibility to do so, it is no clear we have the resources to do it.
688 We are thus looking for your help if you can _test_ on Python 3.12 to see to which extent this affects users and which
688 We are thus looking for your help if you can _test_ on Python 3.12 to see to which extent this affects users and which
689 features are critical.
689 features are critical.
690
690
691 We are not going to pin IPython to Python ``<3.12`` as otherwise on install pip would downgrade/resolve to IPython 8.13,
691 We are not going to pin IPython to Python ``<3.12`` as otherwise on install pip would downgrade/resolve to IPython 8.13,
692 so if you plan to update to Python 3.12 after its release, we encourage for extra care.
692 so if you plan to update to Python 3.12 after its release, we encourage for extra care.
693
693
694
694
695 .. _version 8.13.1:
695 .. _version 8.13.1:
696 .. _version 8.13.2:
696 .. _version 8.13.2:
697 .. _version 8.12.2:
697 .. _version 8.12.2:
698
698
699 IPython 8.13.1, 8.13.2 and 8.12.2
699 IPython 8.13.1, 8.13.2 and 8.12.2
700 ---------------------------------
700 ---------------------------------
701
701
702 3 quick in succession patch release of IPython in addition to IPython 8.13.0
702 3 quick in succession patch release of IPython in addition to IPython 8.13.0
703 having been yanked.
703 having been yanked.
704
704
705 IPython 8.13.0 was improperly tagged as still compatible with Python 3.8, and
705 IPython 8.13.0 was improperly tagged as still compatible with Python 3.8, and
706 still had some mention of compatibility with 3.8. IPython 8.13.1 is identical to
706 still had some mention of compatibility with 3.8. IPython 8.13.1 is identical to
707 8.13 but with the exception of being correctly tagged. This release and yank was
707 8.13 but with the exception of being correctly tagged. This release and yank was
708 mostly done to fix CI.
708 mostly done to fix CI.
709
709
710 IPython 8.12.2 and 8.13.2 contain UI fixes, with respect to right arrow not
710 IPython 8.12.2 and 8.13.2 contain UI fixes, with respect to right arrow not
711 working in some case in the terminal, and 8.12.2 contain also a requested
711 working in some case in the terminal, and 8.12.2 contain also a requested
712 backport of :ghpull:`14029` (Allow safe access to the ``__getattribute__``
712 backport of :ghpull:`14029` (Allow safe access to the ``__getattribute__``
713 method of modules) for tab completion.
713 method of modules) for tab completion.
714
714
715 .. _version 8.13:
715 .. _version 8.13:
716
716
717 IPython 8.13
717 IPython 8.13
718 ------------
718 ------------
719
719
720 As usual for the end of the month, minor release of IPython. This release is
720 As usual for the end of the month, minor release of IPython. This release is
721 significant in that it not only has a number of bugfixes, but also drop support
721 significant in that it not only has a number of bugfixes, but also drop support
722 for Python 3.8 as per NEP 29 (:ghpull:`14023`).
722 for Python 3.8 as per NEP 29 (:ghpull:`14023`).
723
723
724 All the critical bugfixes have been backported onto the 8.12.1 release (see
724 All the critical bugfixes have been backported onto the 8.12.1 release (see
725 below). In addition to that went into 8.12.1 you'll find:
725 below). In addition to that went into 8.12.1 you'll find:
726
726
727 - Pretty representation for ``Counter`` has been fixed to match the Python one
727 - Pretty representation for ``Counter`` has been fixed to match the Python one
728 and be in decreasing order. :ghpull:`14032`
728 and be in decreasing order. :ghpull:`14032`
729 - Module completion is better when jedi is disabled :ghpull:`14029`.
729 - Module completion is better when jedi is disabled :ghpull:`14029`.
730 - Improvement of ``%%bash`` magic that would get stuck :ghpull:`14019`
730 - Improvement of ``%%bash`` magic that would get stuck :ghpull:`14019`
731
731
732
732
733 We hope you enjoy this release an will maybe see you at JupyterCon in less than
733 We hope you enjoy this release an will maybe see you at JupyterCon in less than
734 two weeks.
734 two weeks.
735
735
736 As usual you can find the full list of PRs on GitHub under `the 8.13 milestone
736 As usual you can find the full list of PRs on GitHub under `the 8.13 milestone
737 <https://github.com/ipython/ipython/milestone/115?closed=1>`__.
737 <https://github.com/ipython/ipython/milestone/115?closed=1>`__.
738
738
739 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
739 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
740 work on IPython and related libraries.
740 work on IPython and related libraries.
741
741
742
742
743 .. _version 8.12.1:
743 .. _version 8.12.1:
744
744
745 IPython 8.12.1
745 IPython 8.12.1
746 --------------
746 --------------
747
747
748 This is the twin release of IPython 8.13 that contain only critical UI and bug
748 This is the twin release of IPython 8.13 that contain only critical UI and bug
749 fixes. The next minor version of IPython has dropped support for Python 3.8 – as
749 fixes. The next minor version of IPython has dropped support for Python 3.8 – as
750 per Nep 29 and this IPython 8.12.x will now only receive bugfixes.
750 per Nep 29 and this IPython 8.12.x will now only receive bugfixes.
751
751
752
752
753 - :ghpull:`14004` Fix a bug introduced in IPython 8.12 that crash when
753 - :ghpull:`14004` Fix a bug introduced in IPython 8.12 that crash when
754 inspecting some docstrings.
754 inspecting some docstrings.
755 - :ghpull:`14010` Fix fast traceback code that was not working in some case.
755 - :ghpull:`14010` Fix fast traceback code that was not working in some case.
756 - :ghpull:`14014` Fix ``%page`` magic broken in some case.
756 - :ghpull:`14014` Fix ``%page`` magic broken in some case.
757 - :ghpull:`14026`, :ghpull:`14027` Tweak default shortcut with respect to
757 - :ghpull:`14026`, :ghpull:`14027` Tweak default shortcut with respect to
758 autosuggestions.
758 autosuggestions.
759 - :ghpull:`14033` add back the ability to use ``.get()`` on OInfo object for
759 - :ghpull:`14033` add back the ability to use ``.get()`` on OInfo object for
760 backward compatibility with h5py (this will be re-deprecated later, and h5py
760 backward compatibility with h5py (this will be re-deprecated later, and h5py
761 will also get a fix).
761 will also get a fix).
762
762
763 As usual you can find the full list of PRs on GitHub under `the 8.12.1 milestone
763 As usual you can find the full list of PRs on GitHub under `the 8.12.1 milestone
764 <https://github.com/ipython/ipython/milestone/116?closed=1>`__.
764 <https://github.com/ipython/ipython/milestone/116?closed=1>`__.
765
765
766 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
766 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
767 work on IPython and related libraries.
767 work on IPython and related libraries.
768
768
769 .. _version 8.12.0:
769 .. _version 8.12.0:
770
770
771 IPython 8.12
771 IPython 8.12
772 ------------
772 ------------
773
773
774 Hopefully slightly early release for IPython 8.12. Last Thursday of the month,
774 Hopefully slightly early release for IPython 8.12. Last Thursday of the month,
775 even if I guess it's likely already Friday somewhere in the pacific ocean.
775 even if I guess it's likely already Friday somewhere in the pacific ocean.
776
776
777 A number of PRs and bug fixes this month with close to 20 PRs merged !
777 A number of PRs and bug fixes this month with close to 20 PRs merged !
778
778
779
779
780 The IPython repo reached :ghpull:`14000` !! Actually the PR that create those exact release
780 The IPython repo reached :ghpull:`14000` !! Actually the PR that create those exact release
781 note is :ghpull:`14000`. Ok, more issues and PR is not always better, and I'd
781 note is :ghpull:`14000`. Ok, more issues and PR is not always better, and I'd
782 love to have more time to close issues and Pull Requests.
782 love to have more time to close issues and Pull Requests.
783
783
784 Let's note that in less than 2 month JupyterCon is back, in Paris please visit
784 Let's note that in less than 2 month JupyterCon is back, in Paris please visit
785 `jupytercon.com <https://jupytercon.com>`__, and looking forward to see you
785 `jupytercon.com <https://jupytercon.com>`__, and looking forward to see you
786 there.
786 there.
787
787
788 Packagers should take note that ``typing_extension`` is now a mandatory dependency
788 Packagers should take note that ``typing_extension`` is now a mandatory dependency
789 for Python versions ``<3.10``.
789 for Python versions ``<3.10``.
790
790
791
791
792
792
793 Let's note also that according to `NEP29
793 Let's note also that according to `NEP29
794 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`__, It is soon time to
794 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`__, It is soon time to
795 stop support for Python 3.8 that will be release more than 3 and 1/2 years ago::
795 stop support for Python 3.8 that will be release more than 3 and 1/2 years ago::
796
796
797 On Apr 14, 2023 drop support for Python 3.8 (initially released on Oct 14, 2019)
797 On Apr 14, 2023 drop support for Python 3.8 (initially released on Oct 14, 2019)
798
798
799 Thus I am likely to stop advertising support for Python 3.8 in the next
799 Thus I am likely to stop advertising support for Python 3.8 in the next
800 release at the end of April.
800 release at the end of April.
801
801
802
802
803 Here are some miscellaneous updates of interest:
803 Here are some miscellaneous updates of interest:
804
804
805 - :ghpull:`13957` brings updates to the Qt integration, particularly for Qt6.
805 - :ghpull:`13957` brings updates to the Qt integration, particularly for Qt6.
806 - :ghpull:`13960` fixes the %debug magic command to give access to the local
806 - :ghpull:`13960` fixes the %debug magic command to give access to the local
807 scope.
807 scope.
808 - :ghpull:`13964` fixes some crashes with the new fast traceback code. Note that
808 - :ghpull:`13964` fixes some crashes with the new fast traceback code. Note that
809 there are still some issues with the fast traceback code, and I a, likely
809 there are still some issues with the fast traceback code, and I a, likely
810 to fix and tweak behavior.
810 to fix and tweak behavior.
811 - :ghpull:`13973` We are slowly migrating IPython internals to use proper type
811 - :ghpull:`13973` We are slowly migrating IPython internals to use proper type
812 objects/dataclasses instead of dictionaries to allow static typing checks.
812 objects/dataclasses instead of dictionaries to allow static typing checks.
813 These are technically public API and could lead to breakage, so please let us
813 These are technically public API and could lead to breakage, so please let us
814 know if that's the case and I'll mitigate.
814 know if that's the case and I'll mitigate.
815 - :ghpull:`13990`, :ghpull:`13991`, :ghpull:`13994` all improve keybinding and
815 - :ghpull:`13990`, :ghpull:`13991`, :ghpull:`13994` all improve keybinding and
816 shortcut configurability.
816 shortcut configurability.
817
817
818 As usual you can find the full list of PRs on GitHub under `the 8.12 milestone
818 As usual you can find the full list of PRs on GitHub under `the 8.12 milestone
819 <https://github.com/ipython/ipython/milestone/114?closed=1>`__.
819 <https://github.com/ipython/ipython/milestone/114?closed=1>`__.
820
820
821 We want to thank the D.E. Shaw group for requesting and sponsoring the work on
821 We want to thank the D.E. Shaw group for requesting and sponsoring the work on
822 the following big feature. We had productive discussions on how to best expose
822 the following big feature. We had productive discussions on how to best expose
823 this feature
823 this feature
824
824
825 Dynamic documentation dispatch
825 Dynamic documentation dispatch
826 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
826 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
827
827
828 We are experimenting with dynamic documentation dispatch for object attribute.
828 We are experimenting with dynamic documentation dispatch for object attribute.
829 See :ghissue:`13860`. The goal is to allow object to define documentation for
829 See :ghissue:`13860`. The goal is to allow object to define documentation for
830 their attributes, properties, even when those are dynamically defined with
830 their attributes, properties, even when those are dynamically defined with
831 `__getattr__`.
831 `__getattr__`.
832
832
833 In particular when those objects are base types it can be useful to show the
833 In particular when those objects are base types it can be useful to show the
834 documentation
834 documentation
835
835
836
836
837 .. code-block:: ipython
837 .. code-block:: ipython
838
838
839
839
840 In [1]: class User:
840 In [1]: class User:
841 ...:
841 ...:
842 ...: __custom_documentations__ = {
842 ...: __custom_documentations__ = {
843 ...: "first": "The first name of the user.",
843 ...: "first": "The first name of the user.",
844 ...: "last": "The last name of the user.",
844 ...: "last": "The last name of the user.",
845 ...: }
845 ...: }
846 ...:
846 ...:
847 ...: first:str
847 ...: first:str
848 ...: last:str
848 ...: last:str
849 ...:
849 ...:
850 ...: def __init__(self, first, last):
850 ...: def __init__(self, first, last):
851 ...: self.first = first
851 ...: self.first = first
852 ...: self.last = last
852 ...: self.last = last
853 ...:
853 ...:
854 ...: @property
854 ...: @property
855 ...: def full(self):
855 ...: def full(self):
856 ...: """`self.first` and `self.last` joined by a space."""
856 ...: """`self.first` and `self.last` joined by a space."""
857 ...: return self.first + " " + self.last
857 ...: return self.first + " " + self.last
858 ...:
858 ...:
859 ...:
859 ...:
860 ...: user = Person('Jane', 'Doe')
860 ...: user = Person('Jane', 'Doe')
861
861
862 In [2]: user.first?
862 In [2]: user.first?
863 Type: str
863 Type: str
864 String form: Jane
864 String form: Jane
865 Length: 4
865 Length: 4
866 Docstring: the first name of a the person object, a str
866 Docstring: the first name of a the person object, a str
867 Class docstring:
867 Class docstring:
868 ....
868 ....
869
869
870 In [3]: user.last?
870 In [3]: user.last?
871 Type: str
871 Type: str
872 String form: Doe
872 String form: Doe
873 Length: 3
873 Length: 3
874 Docstring: the last name, also a str
874 Docstring: the last name, also a str
875 ...
875 ...
876
876
877
877
878 We can see here the symmetry with IPython looking for the docstring on the
878 We can see here the symmetry with IPython looking for the docstring on the
879 properties:
879 properties:
880
880
881 .. code-block:: ipython
881 .. code-block:: ipython
882
882
883
883
884 In [4]: user.full?
884 In [4]: user.full?
885 HERE
885 HERE
886 Type: property
886 Type: property
887 String form: <property object at 0x102bb15d0>
887 String form: <property object at 0x102bb15d0>
888 Docstring: first and last join by a space
888 Docstring: first and last join by a space
889
889
890
890
891 Note that while in the above example we use a static dictionary, libraries may
891 Note that while in the above example we use a static dictionary, libraries may
892 decide to use a custom object that define ``__getitem__``, we caution against
892 decide to use a custom object that define ``__getitem__``, we caution against
893 using objects that would trigger computation to show documentation, but it is
893 using objects that would trigger computation to show documentation, but it is
894 sometime preferable for highly dynamic code that for example export ans API as
894 sometime preferable for highly dynamic code that for example export ans API as
895 object.
895 object.
896
896
897
897
898
898
899 .. _version 8.11.0:
899 .. _version 8.11.0:
900
900
901 IPython 8.11
901 IPython 8.11
902 ------------
902 ------------
903
903
904 Back on almost regular monthly schedule for IPython with end-of-month
904 Back on almost regular monthly schedule for IPython with end-of-month
905 really-late-Friday release to make sure some bugs are properly fixed.
905 really-late-Friday release to make sure some bugs are properly fixed.
906 Small addition of with a few new features, bugfix and UX improvements.
906 Small addition of with a few new features, bugfix and UX improvements.
907
907
908 This is a non-exhaustive list, but among other you will find:
908 This is a non-exhaustive list, but among other you will find:
909
909
910 Faster Traceback Highlighting
910 Faster Traceback Highlighting
911 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
911 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
912
912
913 Resurrection of pre-IPython-8 traceback highlighting code.
913 Resurrection of pre-IPython-8 traceback highlighting code.
914
914
915 Really long and complicated files were slow to highlight in traceback with
915 Really long and complicated files were slow to highlight in traceback with
916 IPython 8 despite upstream improvement that make many case better. Therefore
916 IPython 8 despite upstream improvement that make many case better. Therefore
917 starting with IPython 8.11 when one of the highlighted file is more than 10 000
917 starting with IPython 8.11 when one of the highlighted file is more than 10 000
918 line long by default, we'll fallback to a faster path that does not have all the
918 line long by default, we'll fallback to a faster path that does not have all the
919 features of highlighting failing AST nodes.
919 features of highlighting failing AST nodes.
920
920
921 This can be configures by setting the value of
921 This can be configures by setting the value of
922 ``IPython.code.ultratb.FAST_THRESHOLD`` to an arbitrary low or large value.
922 ``IPython.code.ultratb.FAST_THRESHOLD`` to an arbitrary low or large value.
923
923
924
924
925 Autoreload verbosity
925 Autoreload verbosity
926 ~~~~~~~~~~~~~~~~~~~~
926 ~~~~~~~~~~~~~~~~~~~~
927
927
928 We introduce more descriptive names for the ``%autoreload`` parameter:
928 We introduce more descriptive names for the ``%autoreload`` parameter:
929
929
930 - ``%autoreload now`` (also ``%autoreload``) - perform autoreload immediately.
930 - ``%autoreload now`` (also ``%autoreload``) - perform autoreload immediately.
931 - ``%autoreload off`` (also ``%autoreload 0``) - turn off autoreload.
931 - ``%autoreload off`` (also ``%autoreload 0``) - turn off autoreload.
932 - ``%autoreload explicit`` (also ``%autoreload 1``) - turn on autoreload only for modules
932 - ``%autoreload explicit`` (also ``%autoreload 1``) - turn on autoreload only for modules
933 whitelisted by ``%aimport`` statements.
933 whitelisted by ``%aimport`` statements.
934 - ``%autoreload all`` (also ``%autoreload 2``) - turn on autoreload for all modules except those
934 - ``%autoreload all`` (also ``%autoreload 2``) - turn on autoreload for all modules except those
935 blacklisted by ``%aimport`` statements.
935 blacklisted by ``%aimport`` statements.
936 - ``%autoreload complete`` (also ``%autoreload 3``) - all the fatures of ``all`` but also adding new
936 - ``%autoreload complete`` (also ``%autoreload 3``) - all the features of ``all`` but also adding new
937 objects from the imported modules (see
937 objects from the imported modules (see
938 IPython/extensions/tests/test_autoreload.py::test_autoload_newly_added_objects).
938 IPython/extensions/tests/test_autoreload.py::test_autoload_newly_added_objects).
939
939
940 The original designations (e.g. "2") still work, and these new ones are case-insensitive.
940 The original designations (e.g. "2") still work, and these new ones are case-insensitive.
941
941
942 Additionally, the option ``--print`` or ``-p`` can be added to the line to print the names of
942 Additionally, the option ``--print`` or ``-p`` can be added to the line to print the names of
943 modules being reloaded. Similarly, ``--log`` or ``-l`` will output the names to the logger at INFO
943 modules being reloaded. Similarly, ``--log`` or ``-l`` will output the names to the logger at INFO
944 level. Both can be used simultaneously.
944 level. Both can be used simultaneously.
945
945
946 The parsing logic for ``%aimport`` is now improved such that modules can be whitelisted and
946 The parsing logic for ``%aimport`` is now improved such that modules can be whitelisted and
947 blacklisted in the same line, e.g. it's now possible to call ``%aimport os, -math`` to include
947 blacklisted in the same line, e.g. it's now possible to call ``%aimport os, -math`` to include
948 ``os`` for ``%autoreload explicit`` and exclude ``math`` for modes ``all`` and ``complete``.
948 ``os`` for ``%autoreload explicit`` and exclude ``math`` for modes ``all`` and ``complete``.
949
949
950 Terminal shortcuts customization
950 Terminal shortcuts customization
951 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
951 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
952
952
953 Previously modifying shortcuts was only possible by hooking into startup files
953 Previously modifying shortcuts was only possible by hooking into startup files
954 and practically limited to adding new shortcuts or removing all shortcuts bound
954 and practically limited to adding new shortcuts or removing all shortcuts bound
955 to a specific key. This release enables users to override existing terminal
955 to a specific key. This release enables users to override existing terminal
956 shortcuts, disable them or add new keybindings.
956 shortcuts, disable them or add new keybindings.
957
957
958 For example, to set the :kbd:`right` to accept a single character of auto-suggestion
958 For example, to set the :kbd:`right` to accept a single character of auto-suggestion
959 you could use::
959 you could use::
960
960
961 my_shortcuts = [
961 my_shortcuts = [
962 {
962 {
963 "command": "IPython:auto_suggest.accept_character",
963 "command": "IPython:auto_suggest.accept_character",
964 "new_keys": ["right"]
964 "new_keys": ["right"]
965 }
965 }
966 ]
966 ]
967 %config TerminalInteractiveShell.shortcuts = my_shortcuts
967 %config TerminalInteractiveShell.shortcuts = my_shortcuts
968
968
969 You can learn more in :std:configtrait:`TerminalInteractiveShell.shortcuts`
969 You can learn more in :std:configtrait:`TerminalInteractiveShell.shortcuts`
970 configuration reference.
970 configuration reference.
971
971
972 Miscellaneous
972 Miscellaneous
973 ~~~~~~~~~~~~~
973 ~~~~~~~~~~~~~
974
974
975 - ``%gui`` should now support PySide6. :ghpull:`13864`
975 - ``%gui`` should now support PySide6. :ghpull:`13864`
976 - Cli shortcuts can now be configured :ghpull:`13928`, see above.
976 - Cli shortcuts can now be configured :ghpull:`13928`, see above.
977 (note that there might be an issue with prompt_toolkit 3.0.37 and shortcut configuration).
977 (note that there might be an issue with prompt_toolkit 3.0.37 and shortcut configuration).
978
978
979 - Capture output should now respect ``;`` semicolon to suppress output.
979 - Capture output should now respect ``;`` semicolon to suppress output.
980 :ghpull:`13940`
980 :ghpull:`13940`
981 - Base64 encoded images (in jupyter frontend), will not have trailing newlines.
981 - Base64 encoded images (in jupyter frontend), will not have trailing newlines.
982 :ghpull:`13941`
982 :ghpull:`13941`
983
983
984 As usual you can find the full list of PRs on GitHub under `the 8.11 milestone
984 As usual you can find the full list of PRs on GitHub under `the 8.11 milestone
985 <https://github.com/ipython/ipython/milestone/113?closed=1>`__.
985 <https://github.com/ipython/ipython/milestone/113?closed=1>`__.
986
986
987 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
987 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
988 work on IPython and related libraries.
988 work on IPython and related libraries.
989
989
990 .. _version 8.10.0:
990 .. _version 8.10.0:
991
991
992 IPython 8.10
992 IPython 8.10
993 ------------
993 ------------
994
994
995 Out of schedule release of IPython with minor fixes to patch a potential CVE-2023-24816.
995 Out of schedule release of IPython with minor fixes to patch a potential CVE-2023-24816.
996 This is a really low severity CVE that you most likely are not affected by unless:
996 This is a really low severity CVE that you most likely are not affected by unless:
997
997
998 - You are on windows.
998 - You are on windows.
999 - You have a custom build of Python without ``_ctypes``
999 - You have a custom build of Python without ``_ctypes``
1000 - You cd or start IPython or Jupyter in untrusted directory which names may be
1000 - You cd or start IPython or Jupyter in untrusted directory which names may be
1001 valid shell commands.
1001 valid shell commands.
1002
1002
1003 You can read more on `the advisory
1003 You can read more on `the advisory
1004 <https://github.com/ipython/ipython/security/advisories/GHSA-29gw-9793-fvw7>`__.
1004 <https://github.com/ipython/ipython/security/advisories/GHSA-29gw-9793-fvw7>`__.
1005
1005
1006 In addition to fixing this CVE we also fix a couple of outstanding bugs and issues.
1006 In addition to fixing this CVE we also fix a couple of outstanding bugs and issues.
1007
1007
1008 As usual you can find the full list of PRs on GitHub under `the 8.10 milestone
1008 As usual you can find the full list of PRs on GitHub under `the 8.10 milestone
1009 <https://github.com/ipython/ipython/milestone/112?closed=1>`__.
1009 <https://github.com/ipython/ipython/milestone/112?closed=1>`__.
1010
1010
1011 In Particular:
1011 In Particular:
1012
1012
1013 - bump minimum numpy to `>=1.21` version following NEP29. :ghpull:`13930`
1013 - bump minimum numpy to `>=1.21` version following NEP29. :ghpull:`13930`
1014 - fix for compatibility with MyPy 1.0. :ghpull:`13933`
1014 - fix for compatibility with MyPy 1.0. :ghpull:`13933`
1015 - fix nbgrader stalling when IPython's ``showtraceback`` function is
1015 - fix nbgrader stalling when IPython's ``showtraceback`` function is
1016 monkeypatched. :ghpull:`13934`
1016 monkeypatched. :ghpull:`13934`
1017
1017
1018
1018
1019
1019
1020 As this release also contains those minimal changes in addition to fixing the
1020 As this release also contains those minimal changes in addition to fixing the
1021 CVE I decided to bump the minor version anyway.
1021 CVE I decided to bump the minor version anyway.
1022
1022
1023 This will not affect the normal release schedule, so IPython 8.11 is due in
1023 This will not affect the normal release schedule, so IPython 8.11 is due in
1024 about 2 weeks.
1024 about 2 weeks.
1025
1025
1026 .. _version 8.9.0:
1026 .. _version 8.9.0:
1027
1027
1028 IPython 8.9.0
1028 IPython 8.9.0
1029 -------------
1029 -------------
1030
1030
1031 Second release of IPython in 2023, last Friday of the month, we are back on
1031 Second release of IPython in 2023, last Friday of the month, we are back on
1032 track. This is a small release with a few bug-fixes, and improvements, mostly
1032 track. This is a small release with a few bug-fixes, and improvements, mostly
1033 with respect to terminal shortcuts.
1033 with respect to terminal shortcuts.
1034
1034
1035
1035
1036 The biggest improvement for 8.9 is a drastic amelioration of the
1036 The biggest improvement for 8.9 is a drastic amelioration of the
1037 auto-suggestions sponsored by D.E. Shaw and implemented by the more and more
1037 auto-suggestions sponsored by D.E. Shaw and implemented by the more and more
1038 active contributor `@krassowski <https://github.com/krassowski>`.
1038 active contributor `@krassowski <https://github.com/krassowski>`.
1039
1039
1040 - ``right`` accepts a single character from suggestion
1040 - ``right`` accepts a single character from suggestion
1041 - ``ctrl+right`` accepts a semantic token (macos default shortcuts take
1041 - ``ctrl+right`` accepts a semantic token (macos default shortcuts take
1042 precedence and need to be disabled to make this work)
1042 precedence and need to be disabled to make this work)
1043 - ``backspace`` deletes a character and resumes hinting autosuggestions
1043 - ``backspace`` deletes a character and resumes hinting autosuggestions
1044 - ``ctrl-left`` accepts suggestion and moves cursor left one character.
1044 - ``ctrl-left`` accepts suggestion and moves cursor left one character.
1045 - ``backspace`` deletes a character and resumes hinting autosuggestions
1045 - ``backspace`` deletes a character and resumes hinting autosuggestions
1046 - ``down`` moves to suggestion to later in history when no lines are present below the cursors.
1046 - ``down`` moves to suggestion to later in history when no lines are present below the cursors.
1047 - ``up`` moves to suggestion from earlier in history when no lines are present above the cursor.
1047 - ``up`` moves to suggestion from earlier in history when no lines are present above the cursor.
1048
1048
1049 This is best described by the Gif posted by `@krassowski
1049 This is best described by the Gif posted by `@krassowski
1050 <https://github.com/krassowski>`, and in the PR itself :ghpull:`13888`.
1050 <https://github.com/krassowski>`, and in the PR itself :ghpull:`13888`.
1051
1051
1052 .. image:: ../_images/autosuggest.gif
1052 .. image:: ../_images/autosuggest.gif
1053
1053
1054 Please report any feedback in order for us to improve the user experience.
1054 Please report any feedback in order for us to improve the user experience.
1055 In particular we are also working on making the shortcuts configurable.
1055 In particular we are also working on making the shortcuts configurable.
1056
1056
1057 If you are interested in better terminal shortcuts, I also invite you to
1057 If you are interested in better terminal shortcuts, I also invite you to
1058 participate in issue `13879
1058 participate in issue `13879
1059 <https://github.com/ipython/ipython/issues/13879>`__.
1059 <https://github.com/ipython/ipython/issues/13879>`__.
1060
1060
1061
1061
1062 As we follow `NEP29
1062 As we follow `NEP29
1063 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`__, next version of
1063 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`__, next version of
1064 IPython will officially stop supporting numpy 1.20, and will stop supporting
1064 IPython will officially stop supporting numpy 1.20, and will stop supporting
1065 Python 3.8 after April release.
1065 Python 3.8 after April release.
1066
1066
1067 As usual you can find the full list of PRs on GitHub under `the 8.9 milestone
1067 As usual you can find the full list of PRs on GitHub under `the 8.9 milestone
1068 <https://github.com/ipython/ipython/milestone/111?closed=1>`__.
1068 <https://github.com/ipython/ipython/milestone/111?closed=1>`__.
1069
1069
1070
1070
1071 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1071 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1072 work on IPython and related libraries.
1072 work on IPython and related libraries.
1073
1073
1074 .. _version 8.8.0:
1074 .. _version 8.8.0:
1075
1075
1076 IPython 8.8.0
1076 IPython 8.8.0
1077 -------------
1077 -------------
1078
1078
1079 First release of IPython in 2023 as there was no release at the end of
1079 First release of IPython in 2023 as there was no release at the end of
1080 December.
1080 December.
1081
1081
1082 This is an unusually big release (relatively speaking) with more than 15 Pull
1082 This is an unusually big release (relatively speaking) with more than 15 Pull
1083 Requests merged.
1083 Requests merged.
1084
1084
1085 Of particular interest are:
1085 Of particular interest are:
1086
1086
1087 - :ghpull:`13852` that replaces the greedy completer and improves
1087 - :ghpull:`13852` that replaces the greedy completer and improves
1088 completion, in particular for dictionary keys.
1088 completion, in particular for dictionary keys.
1089 - :ghpull:`13858` that adds ``py.typed`` to ``setup.cfg`` to make sure it is
1089 - :ghpull:`13858` that adds ``py.typed`` to ``setup.cfg`` to make sure it is
1090 bundled in wheels.
1090 bundled in wheels.
1091 - :ghpull:`13869` that implements tab completions for IPython options in the
1091 - :ghpull:`13869` that implements tab completions for IPython options in the
1092 shell when using `argcomplete <https://github.com/kislyuk/argcomplete>`. I
1092 shell when using `argcomplete <https://github.com/kislyuk/argcomplete>`. I
1093 believe this also needs a recent version of Traitlets.
1093 believe this also needs a recent version of Traitlets.
1094 - :ghpull:`13865` makes the ``inspector`` class of `InteractiveShell`
1094 - :ghpull:`13865` makes the ``inspector`` class of `InteractiveShell`
1095 configurable.
1095 configurable.
1096 - :ghpull:`13880` that removes minor-version entrypoints as the minor version
1096 - :ghpull:`13880` that removes minor-version entrypoints as the minor version
1097 entry points that would be included in the wheel would be the one of the
1097 entry points that would be included in the wheel would be the one of the
1098 Python version that was used to build the ``whl`` file.
1098 Python version that was used to build the ``whl`` file.
1099
1099
1100 In no particular order, the rest of the changes update the test suite to be
1100 In no particular order, the rest of the changes update the test suite to be
1101 compatible with Pygments 2.14, various docfixes, testing on more recent python
1101 compatible with Pygments 2.14, various docfixes, testing on more recent python
1102 versions and various updates.
1102 versions and various updates.
1103
1103
1104 As usual you can find the full list of PRs on GitHub under `the 8.8 milestone
1104 As usual you can find the full list of PRs on GitHub under `the 8.8 milestone
1105 <https://github.com/ipython/ipython/milestone/110>`__.
1105 <https://github.com/ipython/ipython/milestone/110>`__.
1106
1106
1107 Many thanks to @krassowski for the many PRs and @jasongrout for reviewing and
1107 Many thanks to @krassowski for the many PRs and @jasongrout for reviewing and
1108 merging contributions.
1108 merging contributions.
1109
1109
1110 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1110 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1111 work on IPython and related libraries.
1111 work on IPython and related libraries.
1112
1112
1113 .. _version 8.7.0:
1113 .. _version 8.7.0:
1114
1114
1115 IPython 8.7.0
1115 IPython 8.7.0
1116 -------------
1116 -------------
1117
1117
1118
1118
1119 Small release of IPython with a couple of bug fixes and new features for this
1119 Small release of IPython with a couple of bug fixes and new features for this
1120 month. Next month is the end of year, it is unclear if there will be a release
1120 month. Next month is the end of year, it is unclear if there will be a release
1121 close to the new year's eve, or if the next release will be at the end of January.
1121 close to the new year's eve, or if the next release will be at the end of January.
1122
1122
1123 Here are a few of the relevant fixes,
1123 Here are a few of the relevant fixes,
1124 as usual you can find the full list of PRs on GitHub under `the 8.7 milestone
1124 as usual you can find the full list of PRs on GitHub under `the 8.7 milestone
1125 <https://github.com/ipython/ipython/pulls?q=milestone%3A8.7>`__.
1125 <https://github.com/ipython/ipython/pulls?q=milestone%3A8.7>`__.
1126
1126
1127
1127
1128 - :ghpull:`13834` bump the minimum prompt toolkit to 3.0.11.
1128 - :ghpull:`13834` bump the minimum prompt toolkit to 3.0.11.
1129 - IPython shipped with the ``py.typed`` marker now, and we are progressively
1129 - IPython shipped with the ``py.typed`` marker now, and we are progressively
1130 adding more types. :ghpull:`13831`
1130 adding more types. :ghpull:`13831`
1131 - :ghpull:`13817` add configuration of code blacks formatting.
1131 - :ghpull:`13817` add configuration of code blacks formatting.
1132
1132
1133
1133
1134 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1134 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1135 work on IPython and related libraries.
1135 work on IPython and related libraries.
1136
1136
1137
1137
1138 .. _version 8.6.0:
1138 .. _version 8.6.0:
1139
1139
1140 IPython 8.6.0
1140 IPython 8.6.0
1141 -------------
1141 -------------
1142
1142
1143 Back to a more regular release schedule (at least I try), as Friday is
1143 Back to a more regular release schedule (at least I try), as Friday is
1144 already over by more than 24h hours. This is a slightly bigger release with a
1144 already over by more than 24h hours. This is a slightly bigger release with a
1145 few new features that contain no less than 25 PRs.
1145 few new features that contain no less than 25 PRs.
1146
1146
1147 We'll notably found a couple of non negligible changes:
1147 We'll notably found a couple of non negligible changes:
1148
1148
1149 The ``install_ext`` and related functions have been removed after being
1149 The ``install_ext`` and related functions have been removed after being
1150 deprecated for years. You can use pip to install extensions. ``pip`` did not
1150 deprecated for years. You can use pip to install extensions. ``pip`` did not
1151 exist when ``install_ext`` was introduced. You can still load local extensions
1151 exist when ``install_ext`` was introduced. You can still load local extensions
1152 without installing them. Just set your ``sys.path`` for example. :ghpull:`13744`
1152 without installing them. Just set your ``sys.path`` for example. :ghpull:`13744`
1153
1153
1154 IPython now has extra entry points that use the major *and minor* version of
1154 IPython now has extra entry points that use the major *and minor* version of
1155 python. For some of you this means that you can do a quick ``ipython3.10`` to
1155 python. For some of you this means that you can do a quick ``ipython3.10`` to
1156 launch IPython from the Python 3.10 interpreter, while still using Python 3.11
1156 launch IPython from the Python 3.10 interpreter, while still using Python 3.11
1157 as your main Python. :ghpull:`13743`
1157 as your main Python. :ghpull:`13743`
1158
1158
1159 The completer matcher API has been improved. See :ghpull:`13745`. This should
1159 The completer matcher API has been improved. See :ghpull:`13745`. This should
1160 improve the type inference and improve dict keys completions in many use case.
1160 improve the type inference and improve dict keys completions in many use case.
1161 Thanks ``@krassowski`` for all the work, and the D.E. Shaw group for sponsoring
1161 Thanks ``@krassowski`` for all the work, and the D.E. Shaw group for sponsoring
1162 it.
1162 it.
1163
1163
1164 The color of error nodes in tracebacks can now be customized. See
1164 The color of error nodes in tracebacks can now be customized. See
1165 :ghpull:`13756`. This is a private attribute until someone finds the time to
1165 :ghpull:`13756`. This is a private attribute until someone finds the time to
1166 properly add a configuration option. Note that with Python 3.11 that also shows
1166 properly add a configuration option. Note that with Python 3.11 that also shows
1167 the relevant nodes in traceback, it would be good to leverage this information
1167 the relevant nodes in traceback, it would be good to leverage this information
1168 (plus the "did you mean" info added on attribute errors). But that's likely work
1168 (plus the "did you mean" info added on attribute errors). But that's likely work
1169 I won't have time to do before long, so contributions welcome.
1169 I won't have time to do before long, so contributions welcome.
1170
1170
1171 As we follow NEP 29, we removed support for numpy 1.19 :ghpull:`13760`.
1171 As we follow NEP 29, we removed support for numpy 1.19 :ghpull:`13760`.
1172
1172
1173
1173
1174 The ``open()`` function present in the user namespace by default will now refuse
1174 The ``open()`` function present in the user namespace by default will now refuse
1175 to open the file descriptors 0,1,2 (stdin, out, err), to avoid crashing IPython.
1175 to open the file descriptors 0,1,2 (stdin, out, err), to avoid crashing IPython.
1176 This mostly occurs in teaching context when incorrect values get passed around.
1176 This mostly occurs in teaching context when incorrect values get passed around.
1177
1177
1178
1178
1179 The ``?``, ``??``, and corresponding ``pinfo``, ``pinfo2`` magics can now find
1179 The ``?``, ``??``, and corresponding ``pinfo``, ``pinfo2`` magics can now find
1180 objects inside arrays. That is to say, the following now works::
1180 objects inside arrays. That is to say, the following now works::
1181
1181
1182
1182
1183 >>> def my_func(*arg, **kwargs):pass
1183 >>> def my_func(*arg, **kwargs):pass
1184 >>> container = [my_func]
1184 >>> container = [my_func]
1185 >>> container[0]?
1185 >>> container[0]?
1186
1186
1187
1187
1188 If ``container`` define a custom ``getitem``, this __will__ trigger the custom
1188 If ``container`` define a custom ``getitem``, this __will__ trigger the custom
1189 method. So don't put side effects in your ``getitems``. Thanks to the D.E. Shaw
1189 method. So don't put side effects in your ``getitems``. Thanks to the D.E. Shaw
1190 group for the request and sponsoring the work.
1190 group for the request and sponsoring the work.
1191
1191
1192
1192
1193 As usual you can find the full list of PRs on GitHub under `the 8.6 milestone
1193 As usual you can find the full list of PRs on GitHub under `the 8.6 milestone
1194 <https://github.com/ipython/ipython/pulls?q=milestone%3A8.6>`__.
1194 <https://github.com/ipython/ipython/pulls?q=milestone%3A8.6>`__.
1195
1195
1196 Thanks to all hacktoberfest contributors, please contribute to
1196 Thanks to all hacktoberfest contributors, please contribute to
1197 `closember.org <https://closember.org/>`__.
1197 `closember.org <https://closember.org/>`__.
1198
1198
1199 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1199 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1200 work on IPython and related libraries.
1200 work on IPython and related libraries.
1201
1201
1202 .. _version 8.5.0:
1202 .. _version 8.5.0:
1203
1203
1204 IPython 8.5.0
1204 IPython 8.5.0
1205 -------------
1205 -------------
1206
1206
1207 First release since a couple of month due to various reasons and timing preventing
1207 First release since a couple of month due to various reasons and timing preventing
1208 me for sticking to the usual monthly release the last Friday of each month. This
1208 me for sticking to the usual monthly release the last Friday of each month. This
1209 is of non negligible size as it has more than two dozen PRs with various fixes
1209 is of non negligible size as it has more than two dozen PRs with various fixes
1210 an bug fixes.
1210 an bug fixes.
1211
1211
1212 Many thanks to everybody who contributed PRs for your patience in review and
1212 Many thanks to everybody who contributed PRs for your patience in review and
1213 merges.
1213 merges.
1214
1214
1215 Here is a non-exhaustive list of changes that have been implemented for IPython
1215 Here is a non-exhaustive list of changes that have been implemented for IPython
1216 8.5.0. As usual you can find the full list of issues and PRs tagged with `the
1216 8.5.0. As usual you can find the full list of issues and PRs tagged with `the
1217 8.5 milestone
1217 8.5 milestone
1218 <https://github.com/ipython/ipython/pulls?q=is%3Aclosed+milestone%3A8.5+>`__.
1218 <https://github.com/ipython/ipython/pulls?q=is%3Aclosed+milestone%3A8.5+>`__.
1219
1219
1220 - Added a shortcut for accepting auto suggestion. The End key shortcut for
1220 - Added a shortcut for accepting auto suggestion. The End key shortcut for
1221 accepting auto-suggestion This binding works in Vi mode too, provided
1221 accepting auto-suggestion This binding works in Vi mode too, provided
1222 ``TerminalInteractiveShell.emacs_bindings_in_vi_insert_mode`` is set to be
1222 ``TerminalInteractiveShell.emacs_bindings_in_vi_insert_mode`` is set to be
1223 ``True`` :ghpull:`13566`.
1223 ``True`` :ghpull:`13566`.
1224
1224
1225 - No popup in window for latex generation when generating latex (e.g. via
1225 - No popup in window for latex generation when generating latex (e.g. via
1226 `_latex_repr_`) no popup window is shows under Windows. :ghpull:`13679`
1226 `_latex_repr_`) no popup window is shows under Windows. :ghpull:`13679`
1227
1227
1228 - Fixed error raised when attempting to tab-complete an input string with
1228 - Fixed error raised when attempting to tab-complete an input string with
1229 consecutive periods or forward slashes (such as "file:///var/log/...").
1229 consecutive periods or forward slashes (such as "file:///var/log/...").
1230 :ghpull:`13675`
1230 :ghpull:`13675`
1231
1231
1232 - Relative filenames in Latex rendering :
1232 - Relative filenames in Latex rendering :
1233 The `latex_to_png_dvipng` command internally generates input and output file
1233 The `latex_to_png_dvipng` command internally generates input and output file
1234 arguments to `latex` and `dvipis`. These arguments are now generated as
1234 arguments to `latex` and `dvipis`. These arguments are now generated as
1235 relative files to the current working directory instead of absolute file
1235 relative files to the current working directory instead of absolute file
1236 paths. This solves a problem where the current working directory contains
1236 paths. This solves a problem where the current working directory contains
1237 characters that are not handled properly by `latex` and `dvips`. There are
1237 characters that are not handled properly by `latex` and `dvips`. There are
1238 no changes to the user API. :ghpull:`13680`
1238 no changes to the user API. :ghpull:`13680`
1239
1239
1240 - Stripping decorators bug: Fixed bug which meant that ipython code blocks in
1240 - Stripping decorators bug: Fixed bug which meant that ipython code blocks in
1241 restructured text documents executed with the ipython-sphinx extension
1241 restructured text documents executed with the ipython-sphinx extension
1242 skipped any lines of code containing python decorators. :ghpull:`13612`
1242 skipped any lines of code containing python decorators. :ghpull:`13612`
1243
1243
1244 - Allow some modules with frozen dataclasses to be reloaded. :ghpull:`13732`
1244 - Allow some modules with frozen dataclasses to be reloaded. :ghpull:`13732`
1245 - Fix paste magic on wayland. :ghpull:`13671`
1245 - Fix paste magic on wayland. :ghpull:`13671`
1246 - show maxlen in deque's repr. :ghpull:`13648`
1246 - show maxlen in deque's repr. :ghpull:`13648`
1247
1247
1248 Restore line numbers for Input
1248 Restore line numbers for Input
1249 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1249 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1250
1250
1251 Line number information in tracebacks from input are restored.
1251 Line number information in tracebacks from input are restored.
1252 Line numbers from input were removed during the transition to v8 enhanced traceback reporting.
1252 Line numbers from input were removed during the transition to v8 enhanced traceback reporting.
1253
1253
1254 So, instead of::
1254 So, instead of::
1255
1255
1256 ---------------------------------------------------------------------------
1256 ---------------------------------------------------------------------------
1257 ZeroDivisionError Traceback (most recent call last)
1257 ZeroDivisionError Traceback (most recent call last)
1258 Input In [3], in <cell line: 1>()
1258 Input In [3], in <cell line: 1>()
1259 ----> 1 myfunc(2)
1259 ----> 1 myfunc(2)
1260
1260
1261 Input In [2], in myfunc(z)
1261 Input In [2], in myfunc(z)
1262 1 def myfunc(z):
1262 1 def myfunc(z):
1263 ----> 2 foo.boo(z-1)
1263 ----> 2 foo.boo(z-1)
1264
1264
1265 File ~/code/python/ipython/foo.py:3, in boo(x)
1265 File ~/code/python/ipython/foo.py:3, in boo(x)
1266 2 def boo(x):
1266 2 def boo(x):
1267 ----> 3 return 1/(1-x)
1267 ----> 3 return 1/(1-x)
1268
1268
1269 ZeroDivisionError: division by zero
1269 ZeroDivisionError: division by zero
1270
1270
1271 The error traceback now looks like::
1271 The error traceback now looks like::
1272
1272
1273 ---------------------------------------------------------------------------
1273 ---------------------------------------------------------------------------
1274 ZeroDivisionError Traceback (most recent call last)
1274 ZeroDivisionError Traceback (most recent call last)
1275 Cell In [3], line 1
1275 Cell In [3], line 1
1276 ----> 1 myfunc(2)
1276 ----> 1 myfunc(2)
1277
1277
1278 Cell In [2], line 2, in myfunc(z)
1278 Cell In [2], line 2, in myfunc(z)
1279 1 def myfunc(z):
1279 1 def myfunc(z):
1280 ----> 2 foo.boo(z-1)
1280 ----> 2 foo.boo(z-1)
1281
1281
1282 File ~/code/python/ipython/foo.py:3, in boo(x)
1282 File ~/code/python/ipython/foo.py:3, in boo(x)
1283 2 def boo(x):
1283 2 def boo(x):
1284 ----> 3 return 1/(1-x)
1284 ----> 3 return 1/(1-x)
1285
1285
1286 ZeroDivisionError: division by zero
1286 ZeroDivisionError: division by zero
1287
1287
1288 or, with xmode=Plain::
1288 or, with xmode=Plain::
1289
1289
1290 Traceback (most recent call last):
1290 Traceback (most recent call last):
1291 Cell In [12], line 1
1291 Cell In [12], line 1
1292 myfunc(2)
1292 myfunc(2)
1293 Cell In [6], line 2 in myfunc
1293 Cell In [6], line 2 in myfunc
1294 foo.boo(z-1)
1294 foo.boo(z-1)
1295 File ~/code/python/ipython/foo.py:3 in boo
1295 File ~/code/python/ipython/foo.py:3 in boo
1296 return 1/(1-x)
1296 return 1/(1-x)
1297 ZeroDivisionError: division by zero
1297 ZeroDivisionError: division by zero
1298
1298
1299 :ghpull:`13560`
1299 :ghpull:`13560`
1300
1300
1301 New setting to silence warning if working inside a virtual environment
1301 New setting to silence warning if working inside a virtual environment
1302 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1302 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1303
1303
1304 Previously, when starting IPython in a virtual environment without IPython installed (so IPython from the global environment is used), the following warning was printed:
1304 Previously, when starting IPython in a virtual environment without IPython installed (so IPython from the global environment is used), the following warning was printed:
1305
1305
1306 Attempting to work in a virtualenv. If you encounter problems, please install IPython inside the virtualenv.
1306 Attempting to work in a virtualenv. If you encounter problems, please install IPython inside the virtualenv.
1307
1307
1308 This warning can be permanently silenced by setting ``c.InteractiveShell.warn_venv`` to ``False`` (the default is ``True``).
1308 This warning can be permanently silenced by setting ``c.InteractiveShell.warn_venv`` to ``False`` (the default is ``True``).
1309
1309
1310 :ghpull:`13706`
1310 :ghpull:`13706`
1311
1311
1312 -------
1312 -------
1313
1313
1314 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1314 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1315 work on IPython and related libraries.
1315 work on IPython and related libraries.
1316
1316
1317
1317
1318 .. _version 8.4.0:
1318 .. _version 8.4.0:
1319
1319
1320 IPython 8.4.0
1320 IPython 8.4.0
1321 -------------
1321 -------------
1322
1322
1323 As for 7.34, this version contains a single fix: fix uncaught BdbQuit exceptions on ipdb
1323 As for 7.34, this version contains a single fix: fix uncaught BdbQuit exceptions on ipdb
1324 exit :ghpull:`13668`, and a single typo fix in documentation: :ghpull:`13682`
1324 exit :ghpull:`13668`, and a single typo fix in documentation: :ghpull:`13682`
1325
1325
1326 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1326 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1327 work on IPython and related libraries.
1327 work on IPython and related libraries.
1328
1328
1329
1329
1330 .. _version 8.3.0:
1330 .. _version 8.3.0:
1331
1331
1332 IPython 8.3.0
1332 IPython 8.3.0
1333 -------------
1333 -------------
1334
1334
1335 - :ghpull:`13625`, using ``?``, ``??``, ``*?`` will not call
1335 - :ghpull:`13625`, using ``?``, ``??``, ``*?`` will not call
1336 ``set_next_input`` as most frontend allow proper multiline editing and it was
1336 ``set_next_input`` as most frontend allow proper multiline editing and it was
1337 causing issues for many users of multi-cell frontends. This has been backported to 7.33
1337 causing issues for many users of multi-cell frontends. This has been backported to 7.33
1338
1338
1339
1339
1340 - :ghpull:`13600`, ``pre_run_*``-hooks will now have a ``cell_id`` attribute on
1340 - :ghpull:`13600`, ``pre_run_*``-hooks will now have a ``cell_id`` attribute on
1341 the info object when frontend provides it. This has been backported to 7.33
1341 the info object when frontend provides it. This has been backported to 7.33
1342
1342
1343 - :ghpull:`13624`, fixed :kbd:`End` key being broken after accepting an
1343 - :ghpull:`13624`, fixed :kbd:`End` key being broken after accepting an
1344 auto-suggestion.
1344 auto-suggestion.
1345
1345
1346 - :ghpull:`13657` fixed an issue where history from different sessions would be mixed.
1346 - :ghpull:`13657` fixed an issue where history from different sessions would be mixed.
1347
1347
1348 .. _version 8.2.0:
1348 .. _version 8.2.0:
1349
1349
1350 IPython 8.2.0
1350 IPython 8.2.0
1351 -------------
1351 -------------
1352
1352
1353 IPython 8.2 mostly bring bugfixes to IPython.
1353 IPython 8.2 mostly bring bugfixes to IPython.
1354
1354
1355 - Auto-suggestion can now be elected with the ``end`` key. :ghpull:`13566`
1355 - Auto-suggestion can now be elected with the ``end`` key. :ghpull:`13566`
1356 - Some traceback issues with ``assert etb is not None`` have been fixed. :ghpull:`13588`
1356 - Some traceback issues with ``assert etb is not None`` have been fixed. :ghpull:`13588`
1357 - History is now pulled from the sqitel database and not from in-memory.
1357 - History is now pulled from the sqitel database and not from in-memory.
1358 In particular when using the ``%paste`` magic, the content of the pasted text will
1358 In particular when using the ``%paste`` magic, the content of the pasted text will
1359 be part of the history and not the verbatim text ``%paste`` anymore. :ghpull:`13592`
1359 be part of the history and not the verbatim text ``%paste`` anymore. :ghpull:`13592`
1360 - Fix ``Ctrl-\\`` exit cleanup :ghpull:`13603`
1360 - Fix ``Ctrl-\\`` exit cleanup :ghpull:`13603`
1361 - Fixes to ``ultratb`` ipdb support when used outside of IPython. :ghpull:`13498`
1361 - Fixes to ``ultratb`` ipdb support when used outside of IPython. :ghpull:`13498`
1362
1362
1363
1363
1364 I am still trying to fix and investigate :ghissue:`13598`, which seems to be
1364 I am still trying to fix and investigate :ghissue:`13598`, which seems to be
1365 random, and would appreciate help if you find a reproducible minimal case. I've
1365 random, and would appreciate help if you find a reproducible minimal case. I've
1366 tried to make various changes to the codebase to mitigate it, but a proper fix
1366 tried to make various changes to the codebase to mitigate it, but a proper fix
1367 will be difficult without understanding the cause.
1367 will be difficult without understanding the cause.
1368
1368
1369
1369
1370 All the issues on pull-requests for this release can be found in the `8.2
1370 All the issues on pull-requests for this release can be found in the `8.2
1371 milestone. <https://github.com/ipython/ipython/milestone/100>`__ . And some
1371 milestone. <https://github.com/ipython/ipython/milestone/100>`__ . And some
1372 documentation only PR can be found as part of the `7.33 milestone
1372 documentation only PR can be found as part of the `7.33 milestone
1373 <https://github.com/ipython/ipython/milestone/101>`__ (currently not released).
1373 <https://github.com/ipython/ipython/milestone/101>`__ (currently not released).
1374
1374
1375 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1375 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1376 work on IPython and related libraries.
1376 work on IPython and related libraries.
1377
1377
1378 .. _version 8.1.1:
1378 .. _version 8.1.1:
1379
1379
1380 IPython 8.1.1
1380 IPython 8.1.1
1381 -------------
1381 -------------
1382
1382
1383 Fix an issue with virtualenv and Python 3.8 introduced in 8.1
1383 Fix an issue with virtualenv and Python 3.8 introduced in 8.1
1384
1384
1385 Revert :ghpull:`13537` (fix an issue with symlinks in virtualenv) that raises an
1385 Revert :ghpull:`13537` (fix an issue with symlinks in virtualenv) that raises an
1386 error in Python 3.8, and fixed in a different way in :ghpull:`13559`.
1386 error in Python 3.8, and fixed in a different way in :ghpull:`13559`.
1387
1387
1388 .. _version 8.1:
1388 .. _version 8.1:
1389
1389
1390 IPython 8.1.0
1390 IPython 8.1.0
1391 -------------
1391 -------------
1392
1392
1393 IPython 8.1 is the first minor release after 8.0 and fixes a number of bugs and
1393 IPython 8.1 is the first minor release after 8.0 and fixes a number of bugs and
1394 updates a few behaviors that were problematic with the 8.0 as with many new major
1394 updates a few behaviors that were problematic with the 8.0 as with many new major
1395 release.
1395 release.
1396
1396
1397 Note that beyond the changes listed here, IPython 8.1.0 also contains all the
1397 Note that beyond the changes listed here, IPython 8.1.0 also contains all the
1398 features listed in :ref:`version 7.32`.
1398 features listed in :ref:`version 7.32`.
1399
1399
1400 - Misc and multiple fixes around quotation auto-closing. It is now disabled by
1400 - Misc and multiple fixes around quotation auto-closing. It is now disabled by
1401 default. Run with ``TerminalInteractiveShell.auto_match=True`` to re-enabled
1401 default. Run with ``TerminalInteractiveShell.auto_match=True`` to re-enabled
1402 - Require pygments>=2.4.0 :ghpull:`13459`, this was implicit in the code, but
1402 - Require pygments>=2.4.0 :ghpull:`13459`, this was implicit in the code, but
1403 is now explicit in ``setup.cfg``/``setup.py``
1403 is now explicit in ``setup.cfg``/``setup.py``
1404 - Docs improvement of ``core.magic_arguments`` examples. :ghpull:`13433`
1404 - Docs improvement of ``core.magic_arguments`` examples. :ghpull:`13433`
1405 - Multi-line edit executes too early with await. :ghpull:`13424`
1405 - Multi-line edit executes too early with await. :ghpull:`13424`
1406
1406
1407 - ``black`` is back as an optional dependency, and autoformatting disabled by
1407 - ``black`` is back as an optional dependency, and autoformatting disabled by
1408 default until some fixes are implemented (black improperly reformat magics).
1408 default until some fixes are implemented (black improperly reformat magics).
1409 :ghpull:`13471` Additionally the ability to use ``yapf`` as a code
1409 :ghpull:`13471` Additionally the ability to use ``yapf`` as a code
1410 reformatter has been added :ghpull:`13528` . You can use
1410 reformatter has been added :ghpull:`13528` . You can use
1411 ``TerminalInteractiveShell.autoformatter="black"``,
1411 ``TerminalInteractiveShell.autoformatter="black"``,
1412 ``TerminalInteractiveShell.autoformatter="yapf"`` to re-enable auto formatting
1412 ``TerminalInteractiveShell.autoformatter="yapf"`` to re-enable auto formatting
1413 with black, or switch to yapf.
1413 with black, or switch to yapf.
1414
1414
1415 - Fix and issue where ``display`` was not defined.
1415 - Fix and issue where ``display`` was not defined.
1416
1416
1417 - Auto suggestions are now configurable. Currently only
1417 - Auto suggestions are now configurable. Currently only
1418 ``AutoSuggestFromHistory`` (default) and ``None``. new provider contribution
1418 ``AutoSuggestFromHistory`` (default) and ``None``. new provider contribution
1419 welcomed. :ghpull:`13475`
1419 welcomed. :ghpull:`13475`
1420
1420
1421 - multiple packaging/testing improvement to simplify downstream packaging
1421 - multiple packaging/testing improvement to simplify downstream packaging
1422 (xfail with reasons, try to not access network...).
1422 (xfail with reasons, try to not access network...).
1423
1423
1424 - Update deprecation. ``InteractiveShell.magic`` internal method has been
1424 - Update deprecation. ``InteractiveShell.magic`` internal method has been
1425 deprecated for many years but did not emit a warning until now.
1425 deprecated for many years but did not emit a warning until now.
1426
1426
1427 - internal ``appended_to_syspath`` context manager has been deprecated.
1427 - internal ``appended_to_syspath`` context manager has been deprecated.
1428
1428
1429 - fix an issue with symlinks in virtualenv :ghpull:`13537` (Reverted in 8.1.1)
1429 - fix an issue with symlinks in virtualenv :ghpull:`13537` (Reverted in 8.1.1)
1430
1430
1431 - Fix an issue with vim mode, where cursor would not be reset on exit :ghpull:`13472`
1431 - Fix an issue with vim mode, where cursor would not be reset on exit :ghpull:`13472`
1432
1432
1433 - ipython directive now remove only known pseudo-decorators :ghpull:`13532`
1433 - ipython directive now remove only known pseudo-decorators :ghpull:`13532`
1434
1434
1435 - ``IPython/lib/security`` which used to be used for jupyter notebook has been
1435 - ``IPython/lib/security`` which used to be used for jupyter notebook has been
1436 removed.
1436 removed.
1437
1437
1438 - Fix an issue where ``async with`` would execute on new lines. :ghpull:`13436`
1438 - Fix an issue where ``async with`` would execute on new lines. :ghpull:`13436`
1439
1439
1440
1440
1441 We want to remind users that IPython is part of the Jupyter organisations, and
1441 We want to remind users that IPython is part of the Jupyter organisations, and
1442 thus governed by a Code of Conduct. Some of the behavior we have seen on GitHub is not acceptable.
1442 thus governed by a Code of Conduct. Some of the behavior we have seen on GitHub is not acceptable.
1443 Abuse and non-respectful comments on discussion will not be tolerated.
1443 Abuse and non-respectful comments on discussion will not be tolerated.
1444
1444
1445 Many thanks to all the contributors to this release, many of the above fixed issues and
1445 Many thanks to all the contributors to this release, many of the above fixed issues and
1446 new features were done by first time contributors, showing there is still
1446 new features were done by first time contributors, showing there is still
1447 plenty of easy contribution possible in IPython
1447 plenty of easy contribution possible in IPython
1448 . You can find all individual contributions
1448 . You can find all individual contributions
1449 to this milestone `on github <https://github.com/ipython/ipython/milestone/91>`__.
1449 to this milestone `on github <https://github.com/ipython/ipython/milestone/91>`__.
1450
1450
1451 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1451 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1452 work on IPython and related libraries. In particular the Lazy autoloading of
1452 work on IPython and related libraries. In particular the Lazy autoloading of
1453 magics that you will find described in the 7.32 release notes.
1453 magics that you will find described in the 7.32 release notes.
1454
1454
1455
1455
1456 .. _version 8.0.1:
1456 .. _version 8.0.1:
1457
1457
1458 IPython 8.0.1 (CVE-2022-21699)
1458 IPython 8.0.1 (CVE-2022-21699)
1459 ------------------------------
1459 ------------------------------
1460
1460
1461 IPython 8.0.1, 7.31.1 and 5.11 are security releases that change some default
1461 IPython 8.0.1, 7.31.1 and 5.11 are security releases that change some default
1462 values in order to prevent potential Execution with Unnecessary Privileges.
1462 values in order to prevent potential Execution with Unnecessary Privileges.
1463
1463
1464 Almost all version of IPython looks for configuration and profiles in current
1464 Almost all version of IPython looks for configuration and profiles in current
1465 working directory. Since IPython was developed before pip and environments
1465 working directory. Since IPython was developed before pip and environments
1466 existed it was used a convenient way to load code/packages in a project
1466 existed it was used a convenient way to load code/packages in a project
1467 dependant way.
1467 dependent way.
1468
1468
1469 In 2022, it is not necessary anymore, and can lead to confusing behavior where
1469 In 2022, it is not necessary anymore, and can lead to confusing behavior where
1470 for example cloning a repository and starting IPython or loading a notebook from
1470 for example cloning a repository and starting IPython or loading a notebook from
1471 any Jupyter-Compatible interface that has ipython set as a kernel can lead to
1471 any Jupyter-Compatible interface that has ipython set as a kernel can lead to
1472 code execution.
1472 code execution.
1473
1473
1474
1474
1475 I did not find any standard way for packaged to advertise CVEs they fix, I'm
1475 I did not find any standard way for packaged to advertise CVEs they fix, I'm
1476 thus trying to add a ``__patched_cves__`` attribute to the IPython module that
1476 thus trying to add a ``__patched_cves__`` attribute to the IPython module that
1477 list the CVEs that should have been fixed. This attribute is informational only
1477 list the CVEs that should have been fixed. This attribute is informational only
1478 as if a executable has a flaw, this value can always be changed by an attacker.
1478 as if a executable has a flaw, this value can always be changed by an attacker.
1479
1479
1480 .. code::
1480 .. code::
1481
1481
1482 In [1]: import IPython
1482 In [1]: import IPython
1483
1483
1484 In [2]: IPython.__patched_cves__
1484 In [2]: IPython.__patched_cves__
1485 Out[2]: {'CVE-2022-21699'}
1485 Out[2]: {'CVE-2022-21699'}
1486
1486
1487 In [3]: 'CVE-2022-21699' in IPython.__patched_cves__
1487 In [3]: 'CVE-2022-21699' in IPython.__patched_cves__
1488 Out[3]: True
1488 Out[3]: True
1489
1489
1490 Thus starting with this version:
1490 Thus starting with this version:
1491
1491
1492 - The current working directory is not searched anymore for profiles or
1492 - The current working directory is not searched anymore for profiles or
1493 configurations files.
1493 configurations files.
1494 - Added a ``__patched_cves__`` attribute (set of strings) to IPython module that contain
1494 - Added a ``__patched_cves__`` attribute (set of strings) to IPython module that contain
1495 the list of fixed CVE. This is informational only.
1495 the list of fixed CVE. This is informational only.
1496
1496
1497 Further details can be read on the `GitHub Advisory <https://github.com/ipython/ipython/security/advisories/GHSA-pq7m-3gw7-gq5x>`__
1497 Further details can be read on the `GitHub Advisory <https://github.com/ipython/ipython/security/advisories/GHSA-pq7m-3gw7-gq5x>`__
1498
1498
1499
1499
1500 .. _version 8.0:
1500 .. _version 8.0:
1501
1501
1502 IPython 8.0
1502 IPython 8.0
1503 -----------
1503 -----------
1504
1504
1505 IPython 8.0 is bringing a large number of new features and improvements to both the
1505 IPython 8.0 is bringing a large number of new features and improvements to both the
1506 user of the terminal and of the kernel via Jupyter. The removal of compatibility
1506 user of the terminal and of the kernel via Jupyter. The removal of compatibility
1507 with an older version of Python is also the opportunity to do a couple of
1507 with an older version of Python is also the opportunity to do a couple of
1508 performance improvements in particular with respect to startup time.
1508 performance improvements in particular with respect to startup time.
1509 The 8.x branch started diverging from its predecessor around IPython 7.12
1509 The 8.x branch started diverging from its predecessor around IPython 7.12
1510 (January 2020).
1510 (January 2020).
1511
1511
1512 This release contains 250+ pull requests, in addition to many of the features
1512 This release contains 250+ pull requests, in addition to many of the features
1513 and backports that have made it to the 7.x branch. Please see the
1513 and backports that have made it to the 7.x branch. Please see the
1514 `8.0 milestone <https://github.com/ipython/ipython/milestone/73?closed=1>`__ for the full list of pull requests.
1514 `8.0 milestone <https://github.com/ipython/ipython/milestone/73?closed=1>`__ for the full list of pull requests.
1515
1515
1516 Please feel free to send pull requests to update those notes after release,
1516 Please feel free to send pull requests to update those notes after release,
1517 I have likely forgotten a few things reviewing 250+ PRs.
1517 I have likely forgotten a few things reviewing 250+ PRs.
1518
1518
1519 Dependencies changes/downstream packaging
1519 Dependencies changes/downstream packaging
1520 -----------------------------------------
1520 -----------------------------------------
1521
1521
1522 Most of our building steps have been changed to be (mostly) declarative
1522 Most of our building steps have been changed to be (mostly) declarative
1523 and follow PEP 517. We are trying to completely remove ``setup.py`` (:ghpull:`13238`) and are
1523 and follow PEP 517. We are trying to completely remove ``setup.py`` (:ghpull:`13238`) and are
1524 looking for help to do so.
1524 looking for help to do so.
1525
1525
1526 - minimum supported ``traitlets`` version is now 5+
1526 - minimum supported ``traitlets`` version is now 5+
1527 - we now require ``stack_data``
1527 - we now require ``stack_data``
1528 - minimal Python is now 3.8
1528 - minimal Python is now 3.8
1529 - ``nose`` is not a testing requirement anymore
1529 - ``nose`` is not a testing requirement anymore
1530 - ``pytest`` replaces nose.
1530 - ``pytest`` replaces nose.
1531 - ``iptest``/``iptest3`` cli entrypoints do not exist anymore.
1531 - ``iptest``/``iptest3`` cli entrypoints do not exist anymore.
1532 - the minimum officially ​supported ``numpy`` version has been bumped, but this should
1532 - the minimum officially ​supported ``numpy`` version has been bumped, but this should
1533 not have much effect on packaging.
1533 not have much effect on packaging.
1534
1534
1535
1535
1536 Deprecation and removal
1536 Deprecation and removal
1537 -----------------------
1537 -----------------------
1538
1538
1539 We removed almost all features, arguments, functions, and modules that were
1539 We removed almost all features, arguments, functions, and modules that were
1540 marked as deprecated between IPython 1.0 and 5.0. As a reminder, 5.0 was released
1540 marked as deprecated between IPython 1.0 and 5.0. As a reminder, 5.0 was released
1541 in 2016, and 1.0 in 2013. Last release of the 5 branch was 5.10.0, in May 2020.
1541 in 2016, and 1.0 in 2013. Last release of the 5 branch was 5.10.0, in May 2020.
1542 The few remaining deprecated features we left have better deprecation warnings
1542 The few remaining deprecated features we left have better deprecation warnings
1543 or have been turned into explicit errors for better error messages.
1543 or have been turned into explicit errors for better error messages.
1544
1544
1545 I will use this occasion to add the following requests to anyone emitting a
1545 I will use this occasion to add the following requests to anyone emitting a
1546 deprecation warning:
1546 deprecation warning:
1547
1547
1548 - Please add at least ``stacklevel=2`` so that the warning is emitted into the
1548 - Please add at least ``stacklevel=2`` so that the warning is emitted into the
1549 caller context, and not the callee one.
1549 caller context, and not the callee one.
1550 - Please add **since which version** something is deprecated.
1550 - Please add **since which version** something is deprecated.
1551
1551
1552 As a side note, it is much easier to conditionally compare version
1552 As a side note, it is much easier to conditionally compare version
1553 numbers rather than using ``try/except`` when functionality changes with a version.
1553 numbers rather than using ``try/except`` when functionality changes with a version.
1554
1554
1555 I won't list all the removed features here, but modules like ``IPython.kernel``,
1555 I won't list all the removed features here, but modules like ``IPython.kernel``,
1556 which was just a shim module around ``ipykernel`` for the past 8 years, have been
1556 which was just a shim module around ``ipykernel`` for the past 8 years, have been
1557 removed, and so many other similar things that pre-date the name **Jupyter**
1557 removed, and so many other similar things that pre-date the name **Jupyter**
1558 itself.
1558 itself.
1559
1559
1560 We no longer need to add ``IPython.extensions`` to the PYTHONPATH because that is being
1560 We no longer need to add ``IPython.extensions`` to the PYTHONPATH because that is being
1561 handled by ``load_extension``.
1561 handled by ``load_extension``.
1562
1562
1563 We are also removing ``Cythonmagic``, ``sympyprinting`` and ``rmagic`` as they are now in
1563 We are also removing ``Cythonmagic``, ``sympyprinting`` and ``rmagic`` as they are now in
1564 other packages and no longer need to be inside IPython.
1564 other packages and no longer need to be inside IPython.
1565
1565
1566
1566
1567 Documentation
1567 Documentation
1568 -------------
1568 -------------
1569
1569
1570 The majority of our docstrings have now been reformatted and automatically fixed by
1570 The majority of our docstrings have now been reformatted and automatically fixed by
1571 the experimental `VΓ©lin <https://pypi.org/project/velin/>`_ project to conform
1571 the experimental `VΓ©lin <https://pypi.org/project/velin/>`_ project to conform
1572 to numpydoc.
1572 to numpydoc.
1573
1573
1574 Type annotations
1574 Type annotations
1575 ----------------
1575 ----------------
1576
1576
1577 While IPython itself is highly dynamic and can't be completely typed, many of
1577 While IPython itself is highly dynamic and can't be completely typed, many of
1578 the functions now have type annotations, and part of the codebase is now checked
1578 the functions now have type annotations, and part of the codebase is now checked
1579 by mypy.
1579 by mypy.
1580
1580
1581
1581
1582 Featured changes
1582 Featured changes
1583 ----------------
1583 ----------------
1584
1584
1585 Here is a features list of changes in IPython 8.0. This is of course non-exhaustive.
1585 Here is a features list of changes in IPython 8.0. This is of course non-exhaustive.
1586 Please note as well that many features have been added in the 7.x branch as well
1586 Please note as well that many features have been added in the 7.x branch as well
1587 (and hence why you want to read the 7.x what's new notes), in particular
1587 (and hence why you want to read the 7.x what's new notes), in particular
1588 features contributed by QuantStack (with respect to debugger protocol and Xeus
1588 features contributed by QuantStack (with respect to debugger protocol and Xeus
1589 Python), as well as many debugger features that I was pleased to implement as
1589 Python), as well as many debugger features that I was pleased to implement as
1590 part of my work at QuanSight and sponsored by DE Shaw.
1590 part of my work at QuanSight and sponsored by DE Shaw.
1591
1591
1592 Traceback improvements
1592 Traceback improvements
1593 ~~~~~~~~~~~~~~~~~~~~~~
1593 ~~~~~~~~~~~~~~~~~~~~~~
1594
1594
1595 Previously, error tracebacks for errors happening in code cells were showing a
1595 Previously, error tracebacks for errors happening in code cells were showing a
1596 hash, the one used for compiling the Python AST::
1596 hash, the one used for compiling the Python AST::
1597
1597
1598 In [1]: def foo():
1598 In [1]: def foo():
1599 ...: return 3 / 0
1599 ...: return 3 / 0
1600 ...:
1600 ...:
1601
1601
1602 In [2]: foo()
1602 In [2]: foo()
1603 ---------------------------------------------------------------------------
1603 ---------------------------------------------------------------------------
1604 ZeroDivisionError Traceback (most recent call last)
1604 ZeroDivisionError Traceback (most recent call last)
1605 <ipython-input-2-c19b6d9633cf> in <module>
1605 <ipython-input-2-c19b6d9633cf> in <module>
1606 ----> 1 foo()
1606 ----> 1 foo()
1607
1607
1608 <ipython-input-1-1595a74c32d5> in foo()
1608 <ipython-input-1-1595a74c32d5> in foo()
1609 1 def foo():
1609 1 def foo():
1610 ----> 2 return 3 / 0
1610 ----> 2 return 3 / 0
1611 3
1611 3
1612
1612
1613 ZeroDivisionError: division by zero
1613 ZeroDivisionError: division by zero
1614
1614
1615 The error traceback is now correctly formatted, showing the cell number in which the error happened::
1615 The error traceback is now correctly formatted, showing the cell number in which the error happened::
1616
1616
1617 In [1]: def foo():
1617 In [1]: def foo():
1618 ...: return 3 / 0
1618 ...: return 3 / 0
1619 ...:
1619 ...:
1620
1620
1621 Input In [2]: foo()
1621 Input In [2]: foo()
1622 ---------------------------------------------------------------------------
1622 ---------------------------------------------------------------------------
1623 ZeroDivisionError Traceback (most recent call last)
1623 ZeroDivisionError Traceback (most recent call last)
1624 input In [2], in <module>
1624 input In [2], in <module>
1625 ----> 1 foo()
1625 ----> 1 foo()
1626
1626
1627 Input In [1], in foo()
1627 Input In [1], in foo()
1628 1 def foo():
1628 1 def foo():
1629 ----> 2 return 3 / 0
1629 ----> 2 return 3 / 0
1630
1630
1631 ZeroDivisionError: division by zero
1631 ZeroDivisionError: division by zero
1632
1632
1633 The ``stack_data`` package has been integrated, which provides smarter information in the traceback;
1633 The ``stack_data`` package has been integrated, which provides smarter information in the traceback;
1634 in particular it will highlight the AST node where an error occurs which can help to quickly narrow down errors.
1634 in particular it will highlight the AST node where an error occurs which can help to quickly narrow down errors.
1635
1635
1636 For example in the following snippet::
1636 For example in the following snippet::
1637
1637
1638 def foo(i):
1638 def foo(i):
1639 x = [[[0]]]
1639 x = [[[0]]]
1640 return x[0][i][0]
1640 return x[0][i][0]
1641
1641
1642
1642
1643 def bar():
1643 def bar():
1644 return foo(0) + foo(
1644 return foo(0) + foo(
1645 1
1645 1
1646 ) + foo(2)
1646 ) + foo(2)
1647
1647
1648
1648
1649 calling ``bar()`` would raise an ``IndexError`` on the return line of ``foo``,
1649 calling ``bar()`` would raise an ``IndexError`` on the return line of ``foo``,
1650 and IPython 8.0 is capable of telling you where the index error occurs::
1650 and IPython 8.0 is capable of telling you where the index error occurs::
1651
1651
1652
1652
1653 IndexError
1653 IndexError
1654 Input In [2], in <module>
1654 Input In [2], in <module>
1655 ----> 1 bar()
1655 ----> 1 bar()
1656 ^^^^^
1656 ^^^^^
1657
1657
1658 Input In [1], in bar()
1658 Input In [1], in bar()
1659 6 def bar():
1659 6 def bar():
1660 ----> 7 return foo(0) + foo(
1660 ----> 7 return foo(0) + foo(
1661 ^^^^
1661 ^^^^
1662 8 1
1662 8 1
1663 ^^^^^^^^
1663 ^^^^^^^^
1664 9 ) + foo(2)
1664 9 ) + foo(2)
1665 ^^^^
1665 ^^^^
1666
1666
1667 Input In [1], in foo(i)
1667 Input In [1], in foo(i)
1668 1 def foo(i):
1668 1 def foo(i):
1669 2 x = [[[0]]]
1669 2 x = [[[0]]]
1670 ----> 3 return x[0][i][0]
1670 ----> 3 return x[0][i][0]
1671 ^^^^^^^
1671 ^^^^^^^
1672
1672
1673 The corresponding locations marked here with ``^`` will show up highlighted in
1673 The corresponding locations marked here with ``^`` will show up highlighted in
1674 the terminal and notebooks.
1674 the terminal and notebooks.
1675
1675
1676 Finally, a colon ``::`` and line number is appended after a filename in
1676 Finally, a colon ``::`` and line number is appended after a filename in
1677 traceback::
1677 traceback::
1678
1678
1679
1679
1680 ZeroDivisionError Traceback (most recent call last)
1680 ZeroDivisionError Traceback (most recent call last)
1681 File ~/error.py:4, in <module>
1681 File ~/error.py:4, in <module>
1682 1 def f():
1682 1 def f():
1683 2 1/0
1683 2 1/0
1684 ----> 4 f()
1684 ----> 4 f()
1685
1685
1686 File ~/error.py:2, in f()
1686 File ~/error.py:2, in f()
1687 1 def f():
1687 1 def f():
1688 ----> 2 1/0
1688 ----> 2 1/0
1689
1689
1690 Many terminals and editors have integrations enabling you to directly jump to the
1690 Many terminals and editors have integrations enabling you to directly jump to the
1691 relevant file/line when this syntax is used, so this small addition may have a high
1691 relevant file/line when this syntax is used, so this small addition may have a high
1692 impact on productivity.
1692 impact on productivity.
1693
1693
1694
1694
1695 Autosuggestions
1695 Autosuggestions
1696 ~~~~~~~~~~~~~~~
1696 ~~~~~~~~~~~~~~~
1697
1697
1698 Autosuggestion is a very useful feature available in `fish <https://fishshell.com/>`__, `zsh <https://en.wikipedia.org/wiki/Z_shell>`__, and `prompt-toolkit <https://python-prompt-toolkit.readthedocs.io/en/master/pages/asking_for_input.html#auto-suggestion>`__.
1698 Autosuggestion is a very useful feature available in `fish <https://fishshell.com/>`__, `zsh <https://en.wikipedia.org/wiki/Z_shell>`__, and `prompt-toolkit <https://python-prompt-toolkit.readthedocs.io/en/master/pages/asking_for_input.html#auto-suggestion>`__.
1699
1699
1700 `Ptpython <https://github.com/prompt-toolkit/ptpython#ptpython>`__ allows users to enable this feature in
1700 `Ptpython <https://github.com/prompt-toolkit/ptpython#ptpython>`__ allows users to enable this feature in
1701 `ptpython/config.py <https://github.com/prompt-toolkit/ptpython/blob/master/examples/ptpython_config/config.py#L90>`__.
1701 `ptpython/config.py <https://github.com/prompt-toolkit/ptpython/blob/master/examples/ptpython_config/config.py#L90>`__.
1702
1702
1703 This feature allows users to accept autosuggestions with ctrl e, ctrl f,
1703 This feature allows users to accept autosuggestions with ctrl e, ctrl f,
1704 or right arrow as described below.
1704 or right arrow as described below.
1705
1705
1706 1. Start ipython
1706 1. Start ipython
1707
1707
1708 .. image:: ../_images/8.0/auto_suggest_1_prompt_no_text.png
1708 .. image:: ../_images/8.0/auto_suggest_1_prompt_no_text.png
1709
1709
1710 2. Run ``print("hello")``
1710 2. Run ``print("hello")``
1711
1711
1712 .. image:: ../_images/8.0/auto_suggest_2_print_hello_suggest.png
1712 .. image:: ../_images/8.0/auto_suggest_2_print_hello_suggest.png
1713
1713
1714 3. start typing ``print`` again to see the autosuggestion
1714 3. start typing ``print`` again to see the autosuggestion
1715
1715
1716 .. image:: ../_images/8.0/auto_suggest_3_print_hello_suggest.png
1716 .. image:: ../_images/8.0/auto_suggest_3_print_hello_suggest.png
1717
1717
1718 4. Press ``ctrl-f``, or ``ctrl-e``, or ``right-arrow`` to accept the suggestion
1718 4. Press ``ctrl-f``, or ``ctrl-e``, or ``right-arrow`` to accept the suggestion
1719
1719
1720 .. image:: ../_images/8.0/auto_suggest_4_print_hello.png
1720 .. image:: ../_images/8.0/auto_suggest_4_print_hello.png
1721
1721
1722 You can also complete word by word:
1722 You can also complete word by word:
1723
1723
1724 1. Run ``def say_hello(): print("hello")``
1724 1. Run ``def say_hello(): print("hello")``
1725
1725
1726 .. image:: ../_images/8.0/auto_suggest_second_prompt.png
1726 .. image:: ../_images/8.0/auto_suggest_second_prompt.png
1727
1727
1728 2. Start typing the first letter if ``def`` to see the autosuggestion
1728 2. Start typing the first letter if ``def`` to see the autosuggestion
1729
1729
1730 .. image:: ../_images/8.0/auto_suggest_d_phantom.png
1730 .. image:: ../_images/8.0/auto_suggest_d_phantom.png
1731
1731
1732 3. Press ``alt-f`` (or ``escape`` followed by ``f``), to accept the first word of the suggestion
1732 3. Press ``alt-f`` (or ``escape`` followed by ``f``), to accept the first word of the suggestion
1733
1733
1734 .. image:: ../_images/8.0/auto_suggest_def_phantom.png
1734 .. image:: ../_images/8.0/auto_suggest_def_phantom.png
1735
1735
1736 Importantly, this feature does not interfere with tab completion:
1736 Importantly, this feature does not interfere with tab completion:
1737
1737
1738 1. After running ``def say_hello(): print("hello")``, press d
1738 1. After running ``def say_hello(): print("hello")``, press d
1739
1739
1740 .. image:: ../_images/8.0/auto_suggest_d_phantom.png
1740 .. image:: ../_images/8.0/auto_suggest_d_phantom.png
1741
1741
1742 2. Press Tab to start tab completion
1742 2. Press Tab to start tab completion
1743
1743
1744 .. image:: ../_images/8.0/auto_suggest_d_completions.png
1744 .. image:: ../_images/8.0/auto_suggest_d_completions.png
1745
1745
1746 3A. Press Tab again to select the first option
1746 3A. Press Tab again to select the first option
1747
1747
1748 .. image:: ../_images/8.0/auto_suggest_def_completions.png
1748 .. image:: ../_images/8.0/auto_suggest_def_completions.png
1749
1749
1750 3B. Press ``alt f`` (``escape``, ``f``) to accept to accept the first word of the suggestion
1750 3B. Press ``alt f`` (``escape``, ``f``) to accept to accept the first word of the suggestion
1751
1751
1752 .. image:: ../_images/8.0/auto_suggest_def_phantom.png
1752 .. image:: ../_images/8.0/auto_suggest_def_phantom.png
1753
1753
1754 3C. Press ``ctrl-f`` or ``ctrl-e`` to accept the entire suggestion
1754 3C. Press ``ctrl-f`` or ``ctrl-e`` to accept the entire suggestion
1755
1755
1756 .. image:: ../_images/8.0/auto_suggest_match_parens.png
1756 .. image:: ../_images/8.0/auto_suggest_match_parens.png
1757
1757
1758
1758
1759 Currently, autosuggestions are only shown in the emacs or vi insert editing modes:
1759 Currently, autosuggestions are only shown in the emacs or vi insert editing modes:
1760
1760
1761 - The ctrl e, ctrl f, and alt f shortcuts work by default in emacs mode.
1761 - The ctrl e, ctrl f, and alt f shortcuts work by default in emacs mode.
1762 - To use these shortcuts in vi insert mode, you will have to create `custom keybindings in your config.py <https://github.com/mskar/setup/commit/2892fcee46f9f80ef7788f0749edc99daccc52f4/>`__.
1762 - To use these shortcuts in vi insert mode, you will have to create `custom keybindings in your config.py <https://github.com/mskar/setup/commit/2892fcee46f9f80ef7788f0749edc99daccc52f4/>`__.
1763
1763
1764
1764
1765 Show pinfo information in ipdb using "?" and "??"
1765 Show pinfo information in ipdb using "?" and "??"
1766 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1766 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1767
1767
1768 In IPDB, it is now possible to show the information about an object using "?"
1768 In IPDB, it is now possible to show the information about an object using "?"
1769 and "??", in much the same way that it can be done when using the IPython prompt::
1769 and "??", in much the same way that it can be done when using the IPython prompt::
1770
1770
1771 ipdb> partial?
1771 ipdb> partial?
1772 Init signature: partial(self, /, *args, **kwargs)
1772 Init signature: partial(self, /, *args, **kwargs)
1773 Docstring:
1773 Docstring:
1774 partial(func, *args, **keywords) - new function with partial application
1774 partial(func, *args, **keywords) - new function with partial application
1775 of the given arguments and keywords.
1775 of the given arguments and keywords.
1776 File: ~/.pyenv/versions/3.8.6/lib/python3.8/functools.py
1776 File: ~/.pyenv/versions/3.8.6/lib/python3.8/functools.py
1777 Type: type
1777 Type: type
1778 Subclasses:
1778 Subclasses:
1779
1779
1780 Previously, ``pinfo`` or ``pinfo2`` command had to be used for this purpose.
1780 Previously, ``pinfo`` or ``pinfo2`` command had to be used for this purpose.
1781
1781
1782
1782
1783 Autoreload 3 feature
1783 Autoreload 3 feature
1784 ~~~~~~~~~~~~~~~~~~~~
1784 ~~~~~~~~~~~~~~~~~~~~
1785
1785
1786 Example: When an IPython session is run with the 'autoreload' extension loaded,
1786 Example: When an IPython session is run with the 'autoreload' extension loaded,
1787 you will now have the option '3' to select, which means the following:
1787 you will now have the option '3' to select, which means the following:
1788
1788
1789 1. replicate all functionality from option 2
1789 1. replicate all functionality from option 2
1790 2. autoload all new funcs/classes/enums/globals from the module when they are added
1790 2. autoload all new funcs/classes/enums/globals from the module when they are added
1791 3. autoload all newly imported funcs/classes/enums/globals from external modules
1791 3. autoload all newly imported funcs/classes/enums/globals from external modules
1792
1792
1793 Try ``%autoreload 3`` in an IPython session after running ``%load_ext autoreload``.
1793 Try ``%autoreload 3`` in an IPython session after running ``%load_ext autoreload``.
1794
1794
1795 For more information please see the following unit test : ``extensions/tests/test_autoreload.py:test_autoload_newly_added_objects``
1795 For more information please see the following unit test : ``extensions/tests/test_autoreload.py:test_autoload_newly_added_objects``
1796
1796
1797 Auto formatting with black in the CLI
1797 Auto formatting with black in the CLI
1798 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1798 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1799
1799
1800 This feature was present in 7.x, but disabled by default.
1800 This feature was present in 7.x, but disabled by default.
1801
1801
1802 In 8.0, input was automatically reformatted with Black when black was installed.
1802 In 8.0, input was automatically reformatted with Black when black was installed.
1803 This feature has been reverted for the time being.
1803 This feature has been reverted for the time being.
1804 You can re-enable it by setting ``TerminalInteractiveShell.autoformatter`` to ``"black"``
1804 You can re-enable it by setting ``TerminalInteractiveShell.autoformatter`` to ``"black"``
1805
1805
1806 History Range Glob feature
1806 History Range Glob feature
1807 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1807 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1808
1808
1809 Previously, when using ``%history``, users could specify either
1809 Previously, when using ``%history``, users could specify either
1810 a range of sessions and lines, for example:
1810 a range of sessions and lines, for example:
1811
1811
1812 .. code-block:: python
1812 .. code-block:: python
1813
1813
1814 ~8/1-~6/5 # see history from the first line of 8 sessions ago,
1814 ~8/1-~6/5 # see history from the first line of 8 sessions ago,
1815 # to the fifth line of 6 sessions ago.``
1815 # to the fifth line of 6 sessions ago.``
1816
1816
1817 Or users could specify a glob pattern:
1817 Or users could specify a glob pattern:
1818
1818
1819 .. code-block:: python
1819 .. code-block:: python
1820
1820
1821 -g <pattern> # glob ALL history for the specified pattern.
1821 -g <pattern> # glob ALL history for the specified pattern.
1822
1822
1823 However users could *not* specify both.
1823 However users could *not* specify both.
1824
1824
1825 If a user *did* specify both a range and a glob pattern,
1825 If a user *did* specify both a range and a glob pattern,
1826 then the glob pattern would be used (globbing *all* history) *and the range would be ignored*.
1826 then the glob pattern would be used (globbing *all* history) *and the range would be ignored*.
1827
1827
1828 With this enhancement, if a user specifies both a range and a glob pattern, then the glob pattern will be applied to the specified range of history.
1828 With this enhancement, if a user specifies both a range and a glob pattern, then the glob pattern will be applied to the specified range of history.
1829
1829
1830 Don't start a multi-line cell with sunken parenthesis
1830 Don't start a multi-line cell with sunken parenthesis
1831 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1831 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1832
1832
1833 From now on, IPython will not ask for the next line of input when given a single
1833 From now on, IPython will not ask for the next line of input when given a single
1834 line with more closing than opening brackets. For example, this means that if
1834 line with more closing than opening brackets. For example, this means that if
1835 you (mis)type ``]]`` instead of ``[]``, a ``SyntaxError`` will show up, instead of
1835 you (mis)type ``]]`` instead of ``[]``, a ``SyntaxError`` will show up, instead of
1836 the ``...:`` prompt continuation.
1836 the ``...:`` prompt continuation.
1837
1837
1838 IPython shell for ipdb interact
1838 IPython shell for ipdb interact
1839 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1839 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1840
1840
1841 The ipdb ``interact`` starts an IPython shell instead of Python's built-in ``code.interact()``.
1841 The ipdb ``interact`` starts an IPython shell instead of Python's built-in ``code.interact()``.
1842
1842
1843 Automatic Vi prompt stripping
1843 Automatic Vi prompt stripping
1844 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1844 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1845
1845
1846 When pasting code into IPython, it will strip the leading prompt characters if
1846 When pasting code into IPython, it will strip the leading prompt characters if
1847 there are any. For example, you can paste the following code into the console -
1847 there are any. For example, you can paste the following code into the console -
1848 it will still work, even though each line is prefixed with prompts (``In``,
1848 it will still work, even though each line is prefixed with prompts (``In``,
1849 ``Out``)::
1849 ``Out``)::
1850
1850
1851 In [1]: 2 * 2 == 4
1851 In [1]: 2 * 2 == 4
1852 Out[1]: True
1852 Out[1]: True
1853
1853
1854 In [2]: print("This still works as pasted")
1854 In [2]: print("This still works as pasted")
1855
1855
1856
1856
1857 Previously, this was not the case for the Vi-mode prompts::
1857 Previously, this was not the case for the Vi-mode prompts::
1858
1858
1859 In [1]: [ins] In [13]: 2 * 2 == 4
1859 In [1]: [ins] In [13]: 2 * 2 == 4
1860 ...: Out[13]: True
1860 ...: Out[13]: True
1861 ...:
1861 ...:
1862 File "<ipython-input-1-727bb88eaf33>", line 1
1862 File "<ipython-input-1-727bb88eaf33>", line 1
1863 [ins] In [13]: 2 * 2 == 4
1863 [ins] In [13]: 2 * 2 == 4
1864 ^
1864 ^
1865 SyntaxError: invalid syntax
1865 SyntaxError: invalid syntax
1866
1866
1867 This is now fixed, and Vi prompt prefixes - ``[ins]`` and ``[nav]`` - are
1867 This is now fixed, and Vi prompt prefixes - ``[ins]`` and ``[nav]`` - are
1868 skipped just as the normal ``In`` would be.
1868 skipped just as the normal ``In`` would be.
1869
1869
1870 IPython shell can be started in the Vi mode using ``ipython --TerminalInteractiveShell.editing_mode=vi``,
1870 IPython shell can be started in the Vi mode using ``ipython --TerminalInteractiveShell.editing_mode=vi``,
1871 You should be able to change mode dynamically with ``%config TerminalInteractiveShell.editing_mode='vi'``
1871 You should be able to change mode dynamically with ``%config TerminalInteractiveShell.editing_mode='vi'``
1872
1872
1873 Empty History Ranges
1873 Empty History Ranges
1874 ~~~~~~~~~~~~~~~~~~~~
1874 ~~~~~~~~~~~~~~~~~~~~
1875
1875
1876 A number of magics that take history ranges can now be used with an empty
1876 A number of magics that take history ranges can now be used with an empty
1877 range. These magics are:
1877 range. These magics are:
1878
1878
1879 * ``%save``
1879 * ``%save``
1880 * ``%load``
1880 * ``%load``
1881 * ``%pastebin``
1881 * ``%pastebin``
1882 * ``%pycat``
1882 * ``%pycat``
1883
1883
1884 Using them this way will make them take the history of the current session up
1884 Using them this way will make them take the history of the current session up
1885 to the point of the magic call (such that the magic itself will not be
1885 to the point of the magic call (such that the magic itself will not be
1886 included).
1886 included).
1887
1887
1888 Therefore it is now possible to save the whole history to a file using
1888 Therefore it is now possible to save the whole history to a file using
1889 ``%save <filename>``, load and edit it using ``%load`` (makes for a nice usage
1889 ``%save <filename>``, load and edit it using ``%load`` (makes for a nice usage
1890 when followed with :kbd:`F2`), send it to `dpaste.org <http://dpast.org>`_ using
1890 when followed with :kbd:`F2`), send it to `dpaste.org <http://dpast.org>`_ using
1891 ``%pastebin``, or view the whole thing syntax-highlighted with a single
1891 ``%pastebin``, or view the whole thing syntax-highlighted with a single
1892 ``%pycat``.
1892 ``%pycat``.
1893
1893
1894
1894
1895 Windows timing implementation: Switch to process_time
1895 Windows timing implementation: Switch to process_time
1896 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1896 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1897 Timing on Windows, for example with ``%%time``, was changed from being based on ``time.perf_counter``
1897 Timing on Windows, for example with ``%%time``, was changed from being based on ``time.perf_counter``
1898 (which counted time even when the process was sleeping) to being based on ``time.process_time`` instead
1898 (which counted time even when the process was sleeping) to being based on ``time.process_time`` instead
1899 (which only counts CPU time). This brings it closer to the behavior on Linux. See :ghpull:`12984`.
1899 (which only counts CPU time). This brings it closer to the behavior on Linux. See :ghpull:`12984`.
1900
1900
1901 Miscellaneous
1901 Miscellaneous
1902 ~~~~~~~~~~~~~
1902 ~~~~~~~~~~~~~
1903 - Non-text formatters are not disabled in the terminal, which should simplify
1903 - Non-text formatters are not disabled in the terminal, which should simplify
1904 writing extensions displaying images or other mimetypes in supporting terminals.
1904 writing extensions displaying images or other mimetypes in supporting terminals.
1905 :ghpull:`12315`
1905 :ghpull:`12315`
1906 - It is now possible to automatically insert matching brackets in Terminal IPython using the
1906 - It is now possible to automatically insert matching brackets in Terminal IPython using the
1907 ``TerminalInteractiveShell.auto_match=True`` option. :ghpull:`12586`
1907 ``TerminalInteractiveShell.auto_match=True`` option. :ghpull:`12586`
1908 - We are thinking of deprecating the current ``%%javascript`` magic in favor of a better replacement. See :ghpull:`13376`.
1908 - We are thinking of deprecating the current ``%%javascript`` magic in favor of a better replacement. See :ghpull:`13376`.
1909 - ``~`` is now expanded when part of a path in most magics :ghpull:`13385`
1909 - ``~`` is now expanded when part of a path in most magics :ghpull:`13385`
1910 - ``%/%%timeit`` magic now adds a comma every thousands to make reading a long number easier :ghpull:`13379`
1910 - ``%/%%timeit`` magic now adds a comma every thousands to make reading a long number easier :ghpull:`13379`
1911 - ``"info"`` messages can now be customised to hide some fields :ghpull:`13343`
1911 - ``"info"`` messages can now be customised to hide some fields :ghpull:`13343`
1912 - ``collections.UserList`` now pretty-prints :ghpull:`13320`
1912 - ``collections.UserList`` now pretty-prints :ghpull:`13320`
1913 - The debugger now has a persistent history, which should make it less
1913 - The debugger now has a persistent history, which should make it less
1914 annoying to retype commands :ghpull:`13246`
1914 annoying to retype commands :ghpull:`13246`
1915 - ``!pip`` ``!conda`` ``!cd`` or ``!ls`` are likely doing the wrong thing. We
1915 - ``!pip`` ``!conda`` ``!cd`` or ``!ls`` are likely doing the wrong thing. We
1916 now warn users if they use one of those commands. :ghpull:`12954`
1916 now warn users if they use one of those commands. :ghpull:`12954`
1917 - Make ``%precision`` work for ``numpy.float64`` type :ghpull:`12902`
1917 - Make ``%precision`` work for ``numpy.float64`` type :ghpull:`12902`
1918
1918
1919 Re-added support for XDG config directories
1919 Re-added support for XDG config directories
1920 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1920 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1921
1921
1922 XDG support through the years comes and goes. There is a tension between having
1922 XDG support through the years comes and goes. There is a tension between having
1923 an identical location for configuration in all platforms versus having simple instructions.
1923 an identical location for configuration in all platforms versus having simple instructions.
1924 After initial failures a couple of years ago, IPython was modified to automatically migrate XDG
1924 After initial failures a couple of years ago, IPython was modified to automatically migrate XDG
1925 config files back into ``~/.ipython``. That migration code has now been removed.
1925 config files back into ``~/.ipython``. That migration code has now been removed.
1926 IPython now checks the XDG locations, so if you _manually_ move your config
1926 IPython now checks the XDG locations, so if you _manually_ move your config
1927 files to your preferred location, IPython will not move them back.
1927 files to your preferred location, IPython will not move them back.
1928
1928
1929
1929
1930 Preparing for Python 3.10
1930 Preparing for Python 3.10
1931 -------------------------
1931 -------------------------
1932
1932
1933 To prepare for Python 3.10, we have started working on removing reliance and
1933 To prepare for Python 3.10, we have started working on removing reliance and
1934 any dependency that is not compatible with Python 3.10. This includes migrating our
1934 any dependency that is not compatible with Python 3.10. This includes migrating our
1935 test suite to pytest and starting to remove nose. This also means that the
1935 test suite to pytest and starting to remove nose. This also means that the
1936 ``iptest`` command is now gone and all testing is via pytest.
1936 ``iptest`` command is now gone and all testing is via pytest.
1937
1937
1938 This was in large part thanks to the NumFOCUS Small Developer grant, which enabled us to
1938 This was in large part thanks to the NumFOCUS Small Developer grant, which enabled us to
1939 allocate \$4000 to hire `Nikita Kniazev (@Kojoley) <https://github.com/Kojoley>`_,
1939 allocate \$4000 to hire `Nikita Kniazev (@Kojoley) <https://github.com/Kojoley>`_,
1940 who did a fantastic job at updating our code base, migrating to pytest, pushing
1940 who did a fantastic job at updating our code base, migrating to pytest, pushing
1941 our coverage, and fixing a large number of bugs. I highly recommend contacting
1941 our coverage, and fixing a large number of bugs. I highly recommend contacting
1942 them if you need help with C++ and Python projects.
1942 them if you need help with C++ and Python projects.
1943
1943
1944 You can find all relevant issues and PRs with `the SDG 2021 tag <https://github.com/ipython/ipython/issues?q=label%3A%22Numfocus+SDG+2021%22+>`__
1944 You can find all relevant issues and PRs with `the SDG 2021 tag <https://github.com/ipython/ipython/issues?q=label%3A%22Numfocus+SDG+2021%22+>`__
1945
1945
1946 Removing support for older Python versions
1946 Removing support for older Python versions
1947 ------------------------------------------
1947 ------------------------------------------
1948
1948
1949
1949
1950 We are removing support for Python up through 3.7, allowing internal code to use the more
1950 We are removing support for Python up through 3.7, allowing internal code to use the more
1951 efficient ``pathlib`` and to make better use of type annotations.
1951 efficient ``pathlib`` and to make better use of type annotations.
1952
1952
1953 .. image:: ../_images/8.0/pathlib_pathlib_everywhere.jpg
1953 .. image:: ../_images/8.0/pathlib_pathlib_everywhere.jpg
1954 :alt: "Meme image of Toy Story with Woody and Buzz, with the text 'pathlib, pathlib everywhere'"
1954 :alt: "Meme image of Toy Story with Woody and Buzz, with the text 'pathlib, pathlib everywhere'"
1955
1955
1956
1956
1957 We had about 34 PRs only to update some logic to update some functions from managing strings to
1957 We had about 34 PRs only to update some logic to update some functions from managing strings to
1958 using Pathlib.
1958 using Pathlib.
1959
1959
1960 The completer has also seen significant updates and now makes use of newer Jedi APIs,
1960 The completer has also seen significant updates and now makes use of newer Jedi APIs,
1961 offering faster and more reliable tab completion.
1961 offering faster and more reliable tab completion.
1962
1962
1963 Misc Statistics
1963 Misc Statistics
1964 ---------------
1964 ---------------
1965
1965
1966 Here are some numbers::
1966 Here are some numbers::
1967
1967
1968 7.x: 296 files, 12561 blank lines, 20282 comments, 35142 line of code.
1968 7.x: 296 files, 12561 blank lines, 20282 comments, 35142 line of code.
1969 8.0: 252 files, 12053 blank lines, 19232 comments, 34505 line of code.
1969 8.0: 252 files, 12053 blank lines, 19232 comments, 34505 line of code.
1970
1970
1971 $ git diff --stat 7.x...master | tail -1
1971 $ git diff --stat 7.x...master | tail -1
1972 340 files changed, 13399 insertions(+), 12421 deletions(-)
1972 340 files changed, 13399 insertions(+), 12421 deletions(-)
1973
1973
1974 We have commits from 162 authors, who contributed 1916 commits in 23 month, excluding merges (to not bias toward
1974 We have commits from 162 authors, who contributed 1916 commits in 23 month, excluding merges (to not bias toward
1975 maintainers pushing buttons).::
1975 maintainers pushing buttons).::
1976
1976
1977 $ git shortlog -s --no-merges 7.x...master | sort -nr
1977 $ git shortlog -s --no-merges 7.x...master | sort -nr
1978 535 Matthias Bussonnier
1978 535 Matthias Bussonnier
1979 86 Nikita Kniazev
1979 86 Nikita Kniazev
1980 69 Blazej Michalik
1980 69 Blazej Michalik
1981 49 Samuel Gaist
1981 49 Samuel Gaist
1982 27 Itamar Turner-Trauring
1982 27 Itamar Turner-Trauring
1983 18 Spas Kalaydzhisyki
1983 18 Spas Kalaydzhisyki
1984 17 Thomas Kluyver
1984 17 Thomas Kluyver
1985 17 Quentin Peter
1985 17 Quentin Peter
1986 17 James Morris
1986 17 James Morris
1987 17 Artur Svistunov
1987 17 Artur Svistunov
1988 15 Bart Skowron
1988 15 Bart Skowron
1989 14 Alex Hall
1989 14 Alex Hall
1990 13 rushabh-v
1990 13 rushabh-v
1991 13 Terry Davis
1991 13 Terry Davis
1992 13 Benjamin Ragan-Kelley
1992 13 Benjamin Ragan-Kelley
1993 8 martinRenou
1993 8 martinRenou
1994 8 farisachugthai
1994 8 farisachugthai
1995 7 dswij
1995 7 dswij
1996 7 Gal B
1996 7 Gal B
1997 7 Corentin Cadiou
1997 7 Corentin Cadiou
1998 6 yuji96
1998 6 yuji96
1999 6 Martin Skarzynski
1999 6 Martin Skarzynski
2000 6 Justin Palmer
2000 6 Justin Palmer
2001 6 Daniel Goldfarb
2001 6 Daniel Goldfarb
2002 6 Ben Greiner
2002 6 Ben Greiner
2003 5 Sammy Al Hashemi
2003 5 Sammy Al Hashemi
2004 5 Paul Ivanov
2004 5 Paul Ivanov
2005 5 Inception95
2005 5 Inception95
2006 5 Eyenpi
2006 5 Eyenpi
2007 5 Douglas Blank
2007 5 Douglas Blank
2008 5 Coco Mishra
2008 5 Coco Mishra
2009 5 Bibo Hao
2009 5 Bibo Hao
2010 5 AndrΓ© A. Gomes
2010 5 AndrΓ© A. Gomes
2011 5 Ahmed Fasih
2011 5 Ahmed Fasih
2012 4 takuya fujiwara
2012 4 takuya fujiwara
2013 4 palewire
2013 4 palewire
2014 4 Thomas A Caswell
2014 4 Thomas A Caswell
2015 4 Talley Lambert
2015 4 Talley Lambert
2016 4 Scott Sanderson
2016 4 Scott Sanderson
2017 4 Ram Rachum
2017 4 Ram Rachum
2018 4 Nick Muoh
2018 4 Nick Muoh
2019 4 Nathan Goldbaum
2019 4 Nathan Goldbaum
2020 4 Mithil Poojary
2020 4 Mithil Poojary
2021 4 Michael T
2021 4 Michael T
2022 4 Jakub Klus
2022 4 Jakub Klus
2023 4 Ian Castleden
2023 4 Ian Castleden
2024 4 Eli Rykoff
2024 4 Eli Rykoff
2025 4 Ashwin Vishnu
2025 4 Ashwin Vishnu
2026 3 谭九鼎
2026 3 谭九鼎
2027 3 sleeping
2027 3 sleeping
2028 3 Sylvain Corlay
2028 3 Sylvain Corlay
2029 3 Peter Corke
2029 3 Peter Corke
2030 3 Paul Bissex
2030 3 Paul Bissex
2031 3 Matthew Feickert
2031 3 Matthew Feickert
2032 3 Fernando Perez
2032 3 Fernando Perez
2033 3 Eric Wieser
2033 3 Eric Wieser
2034 3 Daniel Mietchen
2034 3 Daniel Mietchen
2035 3 Aditya Sathe
2035 3 Aditya Sathe
2036 3 007vedant
2036 3 007vedant
2037 2 rchiodo
2037 2 rchiodo
2038 2 nicolaslazo
2038 2 nicolaslazo
2039 2 luttik
2039 2 luttik
2040 2 gorogoroumaru
2040 2 gorogoroumaru
2041 2 foobarbyte
2041 2 foobarbyte
2042 2 bar-hen
2042 2 bar-hen
2043 2 Theo Ouzhinski
2043 2 Theo Ouzhinski
2044 2 Strawkage
2044 2 Strawkage
2045 2 Samreen Zarroug
2045 2 Samreen Zarroug
2046 2 Pete Blois
2046 2 Pete Blois
2047 2 Meysam Azad
2047 2 Meysam Azad
2048 2 Matthieu Ancellin
2048 2 Matthieu Ancellin
2049 2 Mark Schmitz
2049 2 Mark Schmitz
2050 2 Maor Kleinberger
2050 2 Maor Kleinberger
2051 2 MRCWirtz
2051 2 MRCWirtz
2052 2 Lumir Balhar
2052 2 Lumir Balhar
2053 2 Julien Rabinow
2053 2 Julien Rabinow
2054 2 Juan Luis Cano RodrΓ­guez
2054 2 Juan Luis Cano RodrΓ­guez
2055 2 Joyce Er
2055 2 Joyce Er
2056 2 Jakub
2056 2 Jakub
2057 2 Faris A Chugthai
2057 2 Faris A Chugthai
2058 2 Ethan Madden
2058 2 Ethan Madden
2059 2 Dimitri Papadopoulos
2059 2 Dimitri Papadopoulos
2060 2 Diego Fernandez
2060 2 Diego Fernandez
2061 2 Daniel Shimon
2061 2 Daniel Shimon
2062 2 Coco Bennett
2062 2 Coco Bennett
2063 2 Carlos Cordoba
2063 2 Carlos Cordoba
2064 2 Boyuan Liu
2064 2 Boyuan Liu
2065 2 BaoGiang HoangVu
2065 2 BaoGiang HoangVu
2066 2 Augusto
2066 2 Augusto
2067 2 Arthur Svistunov
2067 2 Arthur Svistunov
2068 2 Arthur Moreira
2068 2 Arthur Moreira
2069 2 Ali Nabipour
2069 2 Ali Nabipour
2070 2 Adam Hackbarth
2070 2 Adam Hackbarth
2071 1 richard
2071 1 richard
2072 1 linar-jether
2072 1 linar-jether
2073 1 lbennett
2073 1 lbennett
2074 1 juacrumar
2074 1 juacrumar
2075 1 gpotter2
2075 1 gpotter2
2076 1 digitalvirtuoso
2076 1 digitalvirtuoso
2077 1 dalthviz
2077 1 dalthviz
2078 1 Yonatan Goldschmidt
2078 1 Yonatan Goldschmidt
2079 1 Tomasz KΕ‚oczko
2079 1 Tomasz KΕ‚oczko
2080 1 Tobias Bengfort
2080 1 Tobias Bengfort
2081 1 Timur Kushukov
2081 1 Timur Kushukov
2082 1 Thomas
2082 1 Thomas
2083 1 Snir Broshi
2083 1 Snir Broshi
2084 1 Shao Yang Hong
2084 1 Shao Yang Hong
2085 1 Sanjana-03
2085 1 Sanjana-03
2086 1 Romulo Filho
2086 1 Romulo Filho
2087 1 Rodolfo Carvalho
2087 1 Rodolfo Carvalho
2088 1 Richard Shadrach
2088 1 Richard Shadrach
2089 1 Reilly Tucker Siemens
2089 1 Reilly Tucker Siemens
2090 1 Rakessh Roshan
2090 1 Rakessh Roshan
2091 1 Piers Titus van der Torren
2091 1 Piers Titus van der Torren
2092 1 PhanatosZou
2092 1 PhanatosZou
2093 1 Pavel Safronov
2093 1 Pavel Safronov
2094 1 Paulo S. Costa
2094 1 Paulo S. Costa
2095 1 Paul McCarthy
2095 1 Paul McCarthy
2096 1 NotWearingPants
2096 1 NotWearingPants
2097 1 Naelson Douglas
2097 1 Naelson Douglas
2098 1 Michael Tiemann
2098 1 Michael Tiemann
2099 1 Matt Wozniski
2099 1 Matt Wozniski
2100 1 Markus Wageringel
2100 1 Markus Wageringel
2101 1 Marcus Wirtz
2101 1 Marcus Wirtz
2102 1 Marcio Mazza
2102 1 Marcio Mazza
2103 1 LumΓ­r 'Frenzy' Balhar
2103 1 LumΓ­r 'Frenzy' Balhar
2104 1 Lightyagami1
2104 1 Lightyagami1
2105 1 Leon Anavi
2105 1 Leon Anavi
2106 1 LeafyLi
2106 1 LeafyLi
2107 1 L0uisJ0shua
2107 1 L0uisJ0shua
2108 1 Kyle Cutler
2108 1 Kyle Cutler
2109 1 Krzysztof Cybulski
2109 1 Krzysztof Cybulski
2110 1 Kevin Kirsche
2110 1 Kevin Kirsche
2111 1 KIU Shueng Chuan
2111 1 KIU Shueng Chuan
2112 1 Jonathan Slenders
2112 1 Jonathan Slenders
2113 1 Jay Qi
2113 1 Jay Qi
2114 1 Jake VanderPlas
2114 1 Jake VanderPlas
2115 1 Iwan Briquemont
2115 1 Iwan Briquemont
2116 1 Hussaina Begum Nandyala
2116 1 Hussaina Begum Nandyala
2117 1 Gordon Ball
2117 1 Gordon Ball
2118 1 Gabriel Simonetto
2118 1 Gabriel Simonetto
2119 1 Frank Tobia
2119 1 Frank Tobia
2120 1 Erik
2120 1 Erik
2121 1 Elliott Sales de Andrade
2121 1 Elliott Sales de Andrade
2122 1 Daniel Hahler
2122 1 Daniel Hahler
2123 1 Dan Green-Leipciger
2123 1 Dan Green-Leipciger
2124 1 Dan Green
2124 1 Dan Green
2125 1 Damian Yurzola
2125 1 Damian Yurzola
2126 1 Coon, Ethan T
2126 1 Coon, Ethan T
2127 1 Carol Willing
2127 1 Carol Willing
2128 1 Brian Lee
2128 1 Brian Lee
2129 1 Brendan Gerrity
2129 1 Brendan Gerrity
2130 1 Blake Griffin
2130 1 Blake Griffin
2131 1 Bastian Ebeling
2131 1 Bastian Ebeling
2132 1 Bartosz Telenczuk
2132 1 Bartosz Telenczuk
2133 1 Ankitsingh6299
2133 1 Ankitsingh6299
2134 1 Andrew Port
2134 1 Andrew Port
2135 1 Andrew J. Hesford
2135 1 Andrew J. Hesford
2136 1 Albert Zhang
2136 1 Albert Zhang
2137 1 Adam Johnson
2137 1 Adam Johnson
2138
2138
2139 This does not, of course, represent non-code contributions, for which we are also grateful.
2139 This does not, of course, represent non-code contributions, for which we are also grateful.
2140
2140
2141
2141
2142 API Changes using Frappuccino
2142 API Changes using Frappuccino
2143 -----------------------------
2143 -----------------------------
2144
2144
2145 This is an experimental exhaustive API difference using `Frappuccino <https://pypi.org/project/frappuccino/>`_
2145 This is an experimental exhaustive API difference using `Frappuccino <https://pypi.org/project/frappuccino/>`_
2146
2146
2147
2147
2148 The following items are new in IPython 8.0 ::
2148 The following items are new in IPython 8.0 ::
2149
2149
2150 + IPython.core.async_helpers.get_asyncio_loop()
2150 + IPython.core.async_helpers.get_asyncio_loop()
2151 + IPython.core.completer.Dict
2151 + IPython.core.completer.Dict
2152 + IPython.core.completer.Pattern
2152 + IPython.core.completer.Pattern
2153 + IPython.core.completer.Sequence
2153 + IPython.core.completer.Sequence
2154 + IPython.core.completer.__skip_doctest__
2154 + IPython.core.completer.__skip_doctest__
2155 + IPython.core.debugger.Pdb.precmd(self, line)
2155 + IPython.core.debugger.Pdb.precmd(self, line)
2156 + IPython.core.debugger.__skip_doctest__
2156 + IPython.core.debugger.__skip_doctest__
2157 + IPython.core.display.__getattr__(name)
2157 + IPython.core.display.__getattr__(name)
2158 + IPython.core.display.warn
2158 + IPython.core.display.warn
2159 + IPython.core.display_functions
2159 + IPython.core.display_functions
2160 + IPython.core.display_functions.DisplayHandle
2160 + IPython.core.display_functions.DisplayHandle
2161 + IPython.core.display_functions.DisplayHandle.display(self, obj, **kwargs)
2161 + IPython.core.display_functions.DisplayHandle.display(self, obj, **kwargs)
2162 + IPython.core.display_functions.DisplayHandle.update(self, obj, **kwargs)
2162 + IPython.core.display_functions.DisplayHandle.update(self, obj, **kwargs)
2163 + IPython.core.display_functions.__all__
2163 + IPython.core.display_functions.__all__
2164 + IPython.core.display_functions.__builtins__
2164 + IPython.core.display_functions.__builtins__
2165 + IPython.core.display_functions.__cached__
2165 + IPython.core.display_functions.__cached__
2166 + IPython.core.display_functions.__doc__
2166 + IPython.core.display_functions.__doc__
2167 + IPython.core.display_functions.__file__
2167 + IPython.core.display_functions.__file__
2168 + IPython.core.display_functions.__loader__
2168 + IPython.core.display_functions.__loader__
2169 + IPython.core.display_functions.__name__
2169 + IPython.core.display_functions.__name__
2170 + IPython.core.display_functions.__package__
2170 + IPython.core.display_functions.__package__
2171 + IPython.core.display_functions.__spec__
2171 + IPython.core.display_functions.__spec__
2172 + IPython.core.display_functions.b2a_hex
2172 + IPython.core.display_functions.b2a_hex
2173 + IPython.core.display_functions.clear_output(wait=False)
2173 + IPython.core.display_functions.clear_output(wait=False)
2174 + IPython.core.display_functions.display(*objs, include='None', exclude='None', metadata='None', transient='None', display_id='None', raw=False, clear=False, **kwargs)
2174 + IPython.core.display_functions.display(*objs, include='None', exclude='None', metadata='None', transient='None', display_id='None', raw=False, clear=False, **kwargs)
2175 + IPython.core.display_functions.publish_display_data(data, metadata='None', source='<deprecated>', *, transient='None', **kwargs)
2175 + IPython.core.display_functions.publish_display_data(data, metadata='None', source='<deprecated>', *, transient='None', **kwargs)
2176 + IPython.core.display_functions.update_display(obj, *, display_id, **kwargs)
2176 + IPython.core.display_functions.update_display(obj, *, display_id, **kwargs)
2177 + IPython.core.extensions.BUILTINS_EXTS
2177 + IPython.core.extensions.BUILTINS_EXTS
2178 + IPython.core.inputtransformer2.has_sunken_brackets(tokens)
2178 + IPython.core.inputtransformer2.has_sunken_brackets(tokens)
2179 + IPython.core.interactiveshell.Callable
2179 + IPython.core.interactiveshell.Callable
2180 + IPython.core.interactiveshell.__annotations__
2180 + IPython.core.interactiveshell.__annotations__
2181 + IPython.core.ultratb.List
2181 + IPython.core.ultratb.List
2182 + IPython.core.ultratb.Tuple
2182 + IPython.core.ultratb.Tuple
2183 + IPython.lib.pretty.CallExpression
2183 + IPython.lib.pretty.CallExpression
2184 + IPython.lib.pretty.CallExpression.factory(name)
2184 + IPython.lib.pretty.CallExpression.factory(name)
2185 + IPython.lib.pretty.RawStringLiteral
2185 + IPython.lib.pretty.RawStringLiteral
2186 + IPython.lib.pretty.RawText
2186 + IPython.lib.pretty.RawText
2187 + IPython.terminal.debugger.TerminalPdb.do_interact(self, arg)
2187 + IPython.terminal.debugger.TerminalPdb.do_interact(self, arg)
2188 + IPython.terminal.embed.Set
2188 + IPython.terminal.embed.Set
2189
2189
2190 The following items have been removed (or moved to superclass)::
2190 The following items have been removed (or moved to superclass)::
2191
2191
2192 - IPython.core.application.BaseIPythonApplication.initialize_subcommand
2192 - IPython.core.application.BaseIPythonApplication.initialize_subcommand
2193 - IPython.core.completer.Sentinel
2193 - IPython.core.completer.Sentinel
2194 - IPython.core.completer.skip_doctest
2194 - IPython.core.completer.skip_doctest
2195 - IPython.core.debugger.Tracer
2195 - IPython.core.debugger.Tracer
2196 - IPython.core.display.DisplayHandle
2196 - IPython.core.display.DisplayHandle
2197 - IPython.core.display.DisplayHandle.display
2197 - IPython.core.display.DisplayHandle.display
2198 - IPython.core.display.DisplayHandle.update
2198 - IPython.core.display.DisplayHandle.update
2199 - IPython.core.display.b2a_hex
2199 - IPython.core.display.b2a_hex
2200 - IPython.core.display.clear_output
2200 - IPython.core.display.clear_output
2201 - IPython.core.display.display
2201 - IPython.core.display.display
2202 - IPython.core.display.publish_display_data
2202 - IPython.core.display.publish_display_data
2203 - IPython.core.display.update_display
2203 - IPython.core.display.update_display
2204 - IPython.core.excolors.Deprec
2204 - IPython.core.excolors.Deprec
2205 - IPython.core.excolors.ExceptionColors
2205 - IPython.core.excolors.ExceptionColors
2206 - IPython.core.history.warn
2206 - IPython.core.history.warn
2207 - IPython.core.hooks.late_startup_hook
2207 - IPython.core.hooks.late_startup_hook
2208 - IPython.core.hooks.pre_run_code_hook
2208 - IPython.core.hooks.pre_run_code_hook
2209 - IPython.core.hooks.shutdown_hook
2209 - IPython.core.hooks.shutdown_hook
2210 - IPython.core.interactiveshell.InteractiveShell.init_deprecation_warnings
2210 - IPython.core.interactiveshell.InteractiveShell.init_deprecation_warnings
2211 - IPython.core.interactiveshell.InteractiveShell.init_readline
2211 - IPython.core.interactiveshell.InteractiveShell.init_readline
2212 - IPython.core.interactiveshell.InteractiveShell.write
2212 - IPython.core.interactiveshell.InteractiveShell.write
2213 - IPython.core.interactiveshell.InteractiveShell.write_err
2213 - IPython.core.interactiveshell.InteractiveShell.write_err
2214 - IPython.core.interactiveshell.get_default_colors
2214 - IPython.core.interactiveshell.get_default_colors
2215 - IPython.core.interactiveshell.removed_co_newlocals
2215 - IPython.core.interactiveshell.removed_co_newlocals
2216 - IPython.core.magics.execution.ExecutionMagics.profile_missing_notice
2216 - IPython.core.magics.execution.ExecutionMagics.profile_missing_notice
2217 - IPython.core.magics.script.PIPE
2217 - IPython.core.magics.script.PIPE
2218 - IPython.core.prefilter.PrefilterManager.init_transformers
2218 - IPython.core.prefilter.PrefilterManager.init_transformers
2219 - IPython.core.release.classifiers
2219 - IPython.core.release.classifiers
2220 - IPython.core.release.description
2220 - IPython.core.release.description
2221 - IPython.core.release.keywords
2221 - IPython.core.release.keywords
2222 - IPython.core.release.long_description
2222 - IPython.core.release.long_description
2223 - IPython.core.release.name
2223 - IPython.core.release.name
2224 - IPython.core.release.platforms
2224 - IPython.core.release.platforms
2225 - IPython.core.release.url
2225 - IPython.core.release.url
2226 - IPython.core.ultratb.VerboseTB.format_records
2226 - IPython.core.ultratb.VerboseTB.format_records
2227 - IPython.core.ultratb.find_recursion
2227 - IPython.core.ultratb.find_recursion
2228 - IPython.core.ultratb.findsource
2228 - IPython.core.ultratb.findsource
2229 - IPython.core.ultratb.fix_frame_records_filenames
2229 - IPython.core.ultratb.fix_frame_records_filenames
2230 - IPython.core.ultratb.inspect_error
2230 - IPython.core.ultratb.inspect_error
2231 - IPython.core.ultratb.is_recursion_error
2231 - IPython.core.ultratb.is_recursion_error
2232 - IPython.core.ultratb.with_patch_inspect
2232 - IPython.core.ultratb.with_patch_inspect
2233 - IPython.external.__all__
2233 - IPython.external.__all__
2234 - IPython.external.__builtins__
2234 - IPython.external.__builtins__
2235 - IPython.external.__cached__
2235 - IPython.external.__cached__
2236 - IPython.external.__doc__
2236 - IPython.external.__doc__
2237 - IPython.external.__file__
2237 - IPython.external.__file__
2238 - IPython.external.__loader__
2238 - IPython.external.__loader__
2239 - IPython.external.__name__
2239 - IPython.external.__name__
2240 - IPython.external.__package__
2240 - IPython.external.__package__
2241 - IPython.external.__path__
2241 - IPython.external.__path__
2242 - IPython.external.__spec__
2242 - IPython.external.__spec__
2243 - IPython.kernel.KernelConnectionInfo
2243 - IPython.kernel.KernelConnectionInfo
2244 - IPython.kernel.__builtins__
2244 - IPython.kernel.__builtins__
2245 - IPython.kernel.__cached__
2245 - IPython.kernel.__cached__
2246 - IPython.kernel.__warningregistry__
2246 - IPython.kernel.__warningregistry__
2247 - IPython.kernel.pkg
2247 - IPython.kernel.pkg
2248 - IPython.kernel.protocol_version
2248 - IPython.kernel.protocol_version
2249 - IPython.kernel.protocol_version_info
2249 - IPython.kernel.protocol_version_info
2250 - IPython.kernel.src
2250 - IPython.kernel.src
2251 - IPython.kernel.version_info
2251 - IPython.kernel.version_info
2252 - IPython.kernel.warn
2252 - IPython.kernel.warn
2253 - IPython.lib.backgroundjobs
2253 - IPython.lib.backgroundjobs
2254 - IPython.lib.backgroundjobs.BackgroundJobBase
2254 - IPython.lib.backgroundjobs.BackgroundJobBase
2255 - IPython.lib.backgroundjobs.BackgroundJobBase.run
2255 - IPython.lib.backgroundjobs.BackgroundJobBase.run
2256 - IPython.lib.backgroundjobs.BackgroundJobBase.traceback
2256 - IPython.lib.backgroundjobs.BackgroundJobBase.traceback
2257 - IPython.lib.backgroundjobs.BackgroundJobExpr
2257 - IPython.lib.backgroundjobs.BackgroundJobExpr
2258 - IPython.lib.backgroundjobs.BackgroundJobExpr.call
2258 - IPython.lib.backgroundjobs.BackgroundJobExpr.call
2259 - IPython.lib.backgroundjobs.BackgroundJobFunc
2259 - IPython.lib.backgroundjobs.BackgroundJobFunc
2260 - IPython.lib.backgroundjobs.BackgroundJobFunc.call
2260 - IPython.lib.backgroundjobs.BackgroundJobFunc.call
2261 - IPython.lib.backgroundjobs.BackgroundJobManager
2261 - IPython.lib.backgroundjobs.BackgroundJobManager
2262 - IPython.lib.backgroundjobs.BackgroundJobManager.flush
2262 - IPython.lib.backgroundjobs.BackgroundJobManager.flush
2263 - IPython.lib.backgroundjobs.BackgroundJobManager.new
2263 - IPython.lib.backgroundjobs.BackgroundJobManager.new
2264 - IPython.lib.backgroundjobs.BackgroundJobManager.remove
2264 - IPython.lib.backgroundjobs.BackgroundJobManager.remove
2265 - IPython.lib.backgroundjobs.BackgroundJobManager.result
2265 - IPython.lib.backgroundjobs.BackgroundJobManager.result
2266 - IPython.lib.backgroundjobs.BackgroundJobManager.status
2266 - IPython.lib.backgroundjobs.BackgroundJobManager.status
2267 - IPython.lib.backgroundjobs.BackgroundJobManager.traceback
2267 - IPython.lib.backgroundjobs.BackgroundJobManager.traceback
2268 - IPython.lib.backgroundjobs.__builtins__
2268 - IPython.lib.backgroundjobs.__builtins__
2269 - IPython.lib.backgroundjobs.__cached__
2269 - IPython.lib.backgroundjobs.__cached__
2270 - IPython.lib.backgroundjobs.__doc__
2270 - IPython.lib.backgroundjobs.__doc__
2271 - IPython.lib.backgroundjobs.__file__
2271 - IPython.lib.backgroundjobs.__file__
2272 - IPython.lib.backgroundjobs.__loader__
2272 - IPython.lib.backgroundjobs.__loader__
2273 - IPython.lib.backgroundjobs.__name__
2273 - IPython.lib.backgroundjobs.__name__
2274 - IPython.lib.backgroundjobs.__package__
2274 - IPython.lib.backgroundjobs.__package__
2275 - IPython.lib.backgroundjobs.__spec__
2275 - IPython.lib.backgroundjobs.__spec__
2276 - IPython.lib.kernel.__builtins__
2276 - IPython.lib.kernel.__builtins__
2277 - IPython.lib.kernel.__cached__
2277 - IPython.lib.kernel.__cached__
2278 - IPython.lib.kernel.__doc__
2278 - IPython.lib.kernel.__doc__
2279 - IPython.lib.kernel.__file__
2279 - IPython.lib.kernel.__file__
2280 - IPython.lib.kernel.__loader__
2280 - IPython.lib.kernel.__loader__
2281 - IPython.lib.kernel.__name__
2281 - IPython.lib.kernel.__name__
2282 - IPython.lib.kernel.__package__
2282 - IPython.lib.kernel.__package__
2283 - IPython.lib.kernel.__spec__
2283 - IPython.lib.kernel.__spec__
2284 - IPython.lib.kernel.__warningregistry__
2284 - IPython.lib.kernel.__warningregistry__
2285 - IPython.paths.fs_encoding
2285 - IPython.paths.fs_encoding
2286 - IPython.terminal.debugger.DEFAULT_BUFFER
2286 - IPython.terminal.debugger.DEFAULT_BUFFER
2287 - IPython.terminal.debugger.cursor_in_leading_ws
2287 - IPython.terminal.debugger.cursor_in_leading_ws
2288 - IPython.terminal.debugger.emacs_insert_mode
2288 - IPython.terminal.debugger.emacs_insert_mode
2289 - IPython.terminal.debugger.has_selection
2289 - IPython.terminal.debugger.has_selection
2290 - IPython.terminal.debugger.vi_insert_mode
2290 - IPython.terminal.debugger.vi_insert_mode
2291 - IPython.terminal.interactiveshell.DISPLAY_BANNER_DEPRECATED
2291 - IPython.terminal.interactiveshell.DISPLAY_BANNER_DEPRECATED
2292 - IPython.terminal.ipapp.TerminalIPythonApp.parse_command_line
2292 - IPython.terminal.ipapp.TerminalIPythonApp.parse_command_line
2293 - IPython.testing.test
2293 - IPython.testing.test
2294 - IPython.utils.contexts.NoOpContext
2294 - IPython.utils.contexts.NoOpContext
2295 - IPython.utils.io.IOStream
2295 - IPython.utils.io.IOStream
2296 - IPython.utils.io.IOStream.close
2296 - IPython.utils.io.IOStream.close
2297 - IPython.utils.io.IOStream.write
2297 - IPython.utils.io.IOStream.write
2298 - IPython.utils.io.IOStream.writelines
2298 - IPython.utils.io.IOStream.writelines
2299 - IPython.utils.io.__warningregistry__
2299 - IPython.utils.io.__warningregistry__
2300 - IPython.utils.io.atomic_writing
2300 - IPython.utils.io.atomic_writing
2301 - IPython.utils.io.stderr
2301 - IPython.utils.io.stderr
2302 - IPython.utils.io.stdin
2302 - IPython.utils.io.stdin
2303 - IPython.utils.io.stdout
2303 - IPython.utils.io.stdout
2304 - IPython.utils.io.unicode_std_stream
2304 - IPython.utils.io.unicode_std_stream
2305 - IPython.utils.path.get_ipython_cache_dir
2305 - IPython.utils.path.get_ipython_cache_dir
2306 - IPython.utils.path.get_ipython_dir
2306 - IPython.utils.path.get_ipython_dir
2307 - IPython.utils.path.get_ipython_module_path
2307 - IPython.utils.path.get_ipython_module_path
2308 - IPython.utils.path.get_ipython_package_dir
2308 - IPython.utils.path.get_ipython_package_dir
2309 - IPython.utils.path.locate_profile
2309 - IPython.utils.path.locate_profile
2310 - IPython.utils.path.unquote_filename
2310 - IPython.utils.path.unquote_filename
2311 - IPython.utils.py3compat.PY2
2311 - IPython.utils.py3compat.PY2
2312 - IPython.utils.py3compat.PY3
2312 - IPython.utils.py3compat.PY3
2313 - IPython.utils.py3compat.buffer_to_bytes
2313 - IPython.utils.py3compat.buffer_to_bytes
2314 - IPython.utils.py3compat.builtin_mod_name
2314 - IPython.utils.py3compat.builtin_mod_name
2315 - IPython.utils.py3compat.cast_bytes
2315 - IPython.utils.py3compat.cast_bytes
2316 - IPython.utils.py3compat.getcwd
2316 - IPython.utils.py3compat.getcwd
2317 - IPython.utils.py3compat.isidentifier
2317 - IPython.utils.py3compat.isidentifier
2318 - IPython.utils.py3compat.u_format
2318 - IPython.utils.py3compat.u_format
2319
2319
2320 The following signatures differ between 7.x and 8.0::
2320 The following signatures differ between 7.x and 8.0::
2321
2321
2322 - IPython.core.completer.IPCompleter.unicode_name_matches(self, text)
2322 - IPython.core.completer.IPCompleter.unicode_name_matches(self, text)
2323 + IPython.core.completer.IPCompleter.unicode_name_matches(text)
2323 + IPython.core.completer.IPCompleter.unicode_name_matches(text)
2324
2324
2325 - IPython.core.completer.match_dict_keys(keys, prefix, delims)
2325 - IPython.core.completer.match_dict_keys(keys, prefix, delims)
2326 + IPython.core.completer.match_dict_keys(keys, prefix, delims, extra_prefix='None')
2326 + IPython.core.completer.match_dict_keys(keys, prefix, delims, extra_prefix='None')
2327
2327
2328 - IPython.core.interactiveshell.InteractiveShell.object_inspect_mime(self, oname, detail_level=0)
2328 - IPython.core.interactiveshell.InteractiveShell.object_inspect_mime(self, oname, detail_level=0)
2329 + IPython.core.interactiveshell.InteractiveShell.object_inspect_mime(self, oname, detail_level=0, omit_sections='()')
2329 + IPython.core.interactiveshell.InteractiveShell.object_inspect_mime(self, oname, detail_level=0, omit_sections='()')
2330
2330
2331 - IPython.core.interactiveshell.InteractiveShell.set_hook(self, name, hook, priority=50, str_key='None', re_key='None', _warn_deprecated=True)
2331 - IPython.core.interactiveshell.InteractiveShell.set_hook(self, name, hook, priority=50, str_key='None', re_key='None', _warn_deprecated=True)
2332 + IPython.core.interactiveshell.InteractiveShell.set_hook(self, name, hook, priority=50, str_key='None', re_key='None')
2332 + IPython.core.interactiveshell.InteractiveShell.set_hook(self, name, hook, priority=50, str_key='None', re_key='None')
2333
2333
2334 - IPython.core.oinspect.Inspector.info(self, obj, oname='', formatter='None', info='None', detail_level=0)
2334 - IPython.core.oinspect.Inspector.info(self, obj, oname='', formatter='None', info='None', detail_level=0)
2335 + IPython.core.oinspect.Inspector.info(self, obj, oname='', info='None', detail_level=0)
2335 + IPython.core.oinspect.Inspector.info(self, obj, oname='', info='None', detail_level=0)
2336
2336
2337 - IPython.core.oinspect.Inspector.pinfo(self, obj, oname='', formatter='None', info='None', detail_level=0, enable_html_pager=True)
2337 - IPython.core.oinspect.Inspector.pinfo(self, obj, oname='', formatter='None', info='None', detail_level=0, enable_html_pager=True)
2338 + IPython.core.oinspect.Inspector.pinfo(self, obj, oname='', formatter='None', info='None', detail_level=0, enable_html_pager=True, omit_sections='()')
2338 + IPython.core.oinspect.Inspector.pinfo(self, obj, oname='', formatter='None', info='None', detail_level=0, enable_html_pager=True, omit_sections='()')
2339
2339
2340 - IPython.core.profiledir.ProfileDir.copy_config_file(self, config_file, path='None', overwrite=False)
2340 - IPython.core.profiledir.ProfileDir.copy_config_file(self, config_file, path='None', overwrite=False)
2341 + IPython.core.profiledir.ProfileDir.copy_config_file(self, config_file, path, overwrite=False)
2341 + IPython.core.profiledir.ProfileDir.copy_config_file(self, config_file, path, overwrite=False)
2342
2342
2343 - IPython.core.ultratb.VerboseTB.format_record(self, frame, file, lnum, func, lines, index)
2343 - IPython.core.ultratb.VerboseTB.format_record(self, frame, file, lnum, func, lines, index)
2344 + IPython.core.ultratb.VerboseTB.format_record(self, frame_info)
2344 + IPython.core.ultratb.VerboseTB.format_record(self, frame_info)
2345
2345
2346 - IPython.terminal.embed.InteractiveShellEmbed.mainloop(self, local_ns='None', module='None', stack_depth=0, display_banner='None', global_ns='None', compile_flags='None')
2346 - IPython.terminal.embed.InteractiveShellEmbed.mainloop(self, local_ns='None', module='None', stack_depth=0, display_banner='None', global_ns='None', compile_flags='None')
2347 + IPython.terminal.embed.InteractiveShellEmbed.mainloop(self, local_ns='None', module='None', stack_depth=0, compile_flags='None')
2347 + IPython.terminal.embed.InteractiveShellEmbed.mainloop(self, local_ns='None', module='None', stack_depth=0, compile_flags='None')
2348
2348
2349 - IPython.terminal.embed.embed(**kwargs)
2349 - IPython.terminal.embed.embed(**kwargs)
2350 + IPython.terminal.embed.embed(*, header='', compile_flags='None', **kwargs)
2350 + IPython.terminal.embed.embed(*, header='', compile_flags='None', **kwargs)
2351
2351
2352 - IPython.terminal.interactiveshell.TerminalInteractiveShell.interact(self, display_banner='<object object at 0xffffff>')
2352 - IPython.terminal.interactiveshell.TerminalInteractiveShell.interact(self, display_banner='<object object at 0xffffff>')
2353 + IPython.terminal.interactiveshell.TerminalInteractiveShell.interact(self)
2353 + IPython.terminal.interactiveshell.TerminalInteractiveShell.interact(self)
2354
2354
2355 - IPython.terminal.interactiveshell.TerminalInteractiveShell.mainloop(self, display_banner='<object object at 0xffffff>')
2355 - IPython.terminal.interactiveshell.TerminalInteractiveShell.mainloop(self, display_banner='<object object at 0xffffff>')
2356 + IPython.terminal.interactiveshell.TerminalInteractiveShell.mainloop(self)
2356 + IPython.terminal.interactiveshell.TerminalInteractiveShell.mainloop(self)
2357
2357
2358 - IPython.utils.path.get_py_filename(name, force_win32='None')
2358 - IPython.utils.path.get_py_filename(name, force_win32='None')
2359 + IPython.utils.path.get_py_filename(name)
2359 + IPython.utils.path.get_py_filename(name)
2360
2360
2361 The following are new attributes (that might be inherited)::
2361 The following are new attributes (that might be inherited)::
2362
2362
2363 + IPython.core.completer.IPCompleter.unicode_names
2363 + IPython.core.completer.IPCompleter.unicode_names
2364 + IPython.core.debugger.InterruptiblePdb.precmd
2364 + IPython.core.debugger.InterruptiblePdb.precmd
2365 + IPython.core.debugger.Pdb.precmd
2365 + IPython.core.debugger.Pdb.precmd
2366 + IPython.core.ultratb.AutoFormattedTB.has_colors
2366 + IPython.core.ultratb.AutoFormattedTB.has_colors
2367 + IPython.core.ultratb.ColorTB.has_colors
2367 + IPython.core.ultratb.ColorTB.has_colors
2368 + IPython.core.ultratb.FormattedTB.has_colors
2368 + IPython.core.ultratb.FormattedTB.has_colors
2369 + IPython.core.ultratb.ListTB.has_colors
2369 + IPython.core.ultratb.ListTB.has_colors
2370 + IPython.core.ultratb.SyntaxTB.has_colors
2370 + IPython.core.ultratb.SyntaxTB.has_colors
2371 + IPython.core.ultratb.TBTools.has_colors
2371 + IPython.core.ultratb.TBTools.has_colors
2372 + IPython.core.ultratb.VerboseTB.has_colors
2372 + IPython.core.ultratb.VerboseTB.has_colors
2373 + IPython.terminal.debugger.TerminalPdb.do_interact
2373 + IPython.terminal.debugger.TerminalPdb.do_interact
2374 + IPython.terminal.debugger.TerminalPdb.precmd
2374 + IPython.terminal.debugger.TerminalPdb.precmd
2375
2375
2376 The following attribute/methods have been removed::
2376 The following attribute/methods have been removed::
2377
2377
2378 - IPython.core.application.BaseIPythonApplication.deprecated_subcommands
2378 - IPython.core.application.BaseIPythonApplication.deprecated_subcommands
2379 - IPython.core.ultratb.AutoFormattedTB.format_records
2379 - IPython.core.ultratb.AutoFormattedTB.format_records
2380 - IPython.core.ultratb.ColorTB.format_records
2380 - IPython.core.ultratb.ColorTB.format_records
2381 - IPython.core.ultratb.FormattedTB.format_records
2381 - IPython.core.ultratb.FormattedTB.format_records
2382 - IPython.terminal.embed.InteractiveShellEmbed.init_deprecation_warnings
2382 - IPython.terminal.embed.InteractiveShellEmbed.init_deprecation_warnings
2383 - IPython.terminal.embed.InteractiveShellEmbed.init_readline
2383 - IPython.terminal.embed.InteractiveShellEmbed.init_readline
2384 - IPython.terminal.embed.InteractiveShellEmbed.write
2384 - IPython.terminal.embed.InteractiveShellEmbed.write
2385 - IPython.terminal.embed.InteractiveShellEmbed.write_err
2385 - IPython.terminal.embed.InteractiveShellEmbed.write_err
2386 - IPython.terminal.interactiveshell.TerminalInteractiveShell.init_deprecation_warnings
2386 - IPython.terminal.interactiveshell.TerminalInteractiveShell.init_deprecation_warnings
2387 - IPython.terminal.interactiveshell.TerminalInteractiveShell.init_readline
2387 - IPython.terminal.interactiveshell.TerminalInteractiveShell.init_readline
2388 - IPython.terminal.interactiveshell.TerminalInteractiveShell.write
2388 - IPython.terminal.interactiveshell.TerminalInteractiveShell.write
2389 - IPython.terminal.interactiveshell.TerminalInteractiveShell.write_err
2389 - IPython.terminal.interactiveshell.TerminalInteractiveShell.write_err
2390 - IPython.terminal.ipapp.LocateIPythonApp.deprecated_subcommands
2390 - IPython.terminal.ipapp.LocateIPythonApp.deprecated_subcommands
2391 - IPython.terminal.ipapp.LocateIPythonApp.initialize_subcommand
2391 - IPython.terminal.ipapp.LocateIPythonApp.initialize_subcommand
2392 - IPython.terminal.ipapp.TerminalIPythonApp.deprecated_subcommands
2392 - IPython.terminal.ipapp.TerminalIPythonApp.deprecated_subcommands
2393 - IPython.terminal.ipapp.TerminalIPythonApp.initialize_subcommand
2393 - IPython.terminal.ipapp.TerminalIPythonApp.initialize_subcommand
2394
2394
2395 ------
2395 ------
2396
2396
2397 .. [1] If this make you incomfortable feel free to not use IPython 8.23.
2397 .. [1] If this make you uncomfortable feel free to not use IPython 8.23.
General Comments 0
You need to be logged in to leave comments. Login now