##// END OF EJS Templates
DOC: whatsnew/v8: Update release notes for the Mamba and Micromamba magic commands #14191
Wes Turner -
Show More
@@ -1,2349 +1,2362
1 ============
1 ============
2 8.x Series
2 8.x Series
3 ============
3 ============
4 .. _version 8.27:
4 .. _version 8.27:
5
5
6 IPython 8.27
6 IPython 8.27
7 ============
7 ============
8
8
9 New release of IPython after a month off (not enough changes). We can see a few
9 New release of IPython after a month off (not enough changes). We can see a few
10 important changes for this release.
10 important changes for this release.
11
11
12 - autocall was beeing call getitem, :ghpull:`14486`
12 - autocall was beeing call getitem, :ghpull:`14486`
13 - Only copy files in startup dir if we just created it. :ghpull:`14497`
13 - Only copy files in startup dir if we just created it. :ghpull:`14497`
14 - Fix some tests on Python 3.13 RC1 :ghpull:`14504`; this one I guess make this
14 - Fix some tests on Python 3.13 RC1 :ghpull:`14504`; this one I guess make this
15 the first IPython release officially compatible with Python 3.13; you will
15 the first IPython release officially compatible with Python 3.13; you will
16 need the most recent ``executing`` and ``stack_data``, we won't pin to avoid
16 need the most recent ``executing`` and ``stack_data``, we won't pin to avoid
17 forcing user of older Python version to upgrade.
17 forcing user of older Python version to upgrade.
18
18
19
19
20 As usual you can find the full list of PRs on GitHub under `the 8.27
20 As usual you can find the full list of PRs on GitHub under `the 8.27
21 <https://github.com/ipython/ipython/milestone/134?closed=1>`__ milestone.
21 <https://github.com/ipython/ipython/milestone/134?closed=1>`__ milestone.
22
22
23 Thanks
23 Thanks
24 ------
24 ------
25
25
26 Many thanks to `@Kleirre <https://github.com/Kleirre>`__ our June intern for
26 Many thanks to `@Kleirre <https://github.com/Kleirre>`__ our June intern for
27 doing her first contribution to open source, doing the releases notes and
27 doing her first contribution to open source, doing the releases notes and
28 release. I guess you didn't even notice it was not me who released :-). I wish
28 release. I guess you didn't even notice it was not me who released :-). I wish
29 her all the best in her future endeavor and look forward for her work in
29 her all the best in her future endeavor and look forward for her work in
30 astrophysics.
30 astrophysics.
31
31
32 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
32 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
33 work on IPython and related libraries.
33 work on IPython and related libraries.
34
34
35 .. _version 8.26:
35 .. _version 8.26:
36
36
37 IPython 8.26
37 IPython 8.26
38 ============
38 ============
39
39
40 Hey, the release of IPython for this month is here! (I know you were waiting for it)
40 Hey, the release of IPython for this month is here! (I know you were waiting for it)
41
41
42 - :ghpull:`14453` bugfix for call to structured_traceback
42 - :ghpull:`14453` bugfix for call to structured_traceback
43
43
44 - :ghpull:`14466` fixed honoring custom repr for NamedTuple if assigned by partialmethod
44 - :ghpull:`14466` fixed honoring custom repr for NamedTuple if assigned by partialmethod
45
45
46 - :ghpull:`14451` Convert matplotlib gui name in enable_gui
46 - :ghpull:`14451` Convert matplotlib gui name in enable_gui
47
47
48 As usual you can find the full list of PRs on GitHub under `the 8.26
48 As usual you can find the full list of PRs on GitHub under `the 8.26
49 <https://github.com/ipython/ipython/milestone/133?closed=1>`__ milestone.
49 <https://github.com/ipython/ipython/milestone/133?closed=1>`__ milestone.
50
50
51 Thanks
51 Thanks
52 ------
52 ------
53
53
54 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
54 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
55 work on IPython and related libraries.
55 work on IPython and related libraries.
56
56
57
57
58 .. _version 8.25:
58 .. _version 8.25:
59
59
60 IPython 8.25
60 IPython 8.25
61 ============
61 ============
62
62
63 Mostly internal changes for this end of may release of IPython.
63 Mostly internal changes for this end of may release of IPython.
64
64
65 We'll count about a dozen PRs for this moth, with small bugfixes related to
65 We'll count about a dozen PRs for this moth, with small bugfixes related to
66 matplotlib fixes.
66 matplotlib fixes.
67
67
68 Of notable interest,
68 Of notable interest,
69
69
70 - :ghpull:`14426` replaces the unicode micro symbol with greek letter mu,
70 - :ghpull:`14426` replaces the unicode micro symbol with greek letter mu,
71 visually identical but should fix nfkc normalisations issues.
71 visually identical but should fix nfkc normalisations issues.
72
72
73 - :ghpull:`14444` introduces ``intersphinx_registry`` as a new dependency
73 - :ghpull:`14444` introduces ``intersphinx_registry`` as a new dependency
74 which is recommended only to build documentation.
74 which is recommended only to build documentation.
75
75
76 As usual you can find the full list of PRs on GitHub under `the 8.25
76 As usual you can find the full list of PRs on GitHub under `the 8.25
77 <https://github.com/ipython/ipython/milestone/132?closed=1>`__ milestone.
77 <https://github.com/ipython/ipython/milestone/132?closed=1>`__ milestone.
78
78
79 Thanks
79 Thanks
80 ------
80 ------
81
81
82 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
82 Thanks 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 8.24:
86 .. _version 8.24:
87
87
88 IPython 8.24
88 IPython 8.24
89 ============
89 ============
90
90
91 Back on regular release schedule, as usual month releases are relatively tiny.
91 Back on regular release schedule, as usual month releases are relatively tiny.
92
92
93 The biggest change is the move of the matplotlib backend handling from IPython
93 The biggest change is the move of the matplotlib backend handling from IPython
94 to matplotlib. :ghpull:`14371` :ghpull:`14403`.
94 to matplotlib. :ghpull:`14371` :ghpull:`14403`.
95
95
96 We will note:
96 We will note:
97
97
98 - pytest 8 compatibility :ghpull:`14413`
98 - pytest 8 compatibility :ghpull:`14413`
99 - ``typing-extension`` now needs 4.6 or newer. It was already the case, but not
99 - ``typing-extension`` now needs 4.6 or newer. It was already the case, but not
100 explicated. :ghpull:`14380`
100 explicated. :ghpull:`14380`
101 - Attempt to speed running code under debugger in some cases. :ghpull:`14386`
101 - Attempt to speed running code under debugger in some cases. :ghpull:`14386`
102 :ghpull:`14418`.
102 :ghpull:`14418`.
103 - Multiple fixes to documentation for ipyparallel, simple_prompt and emacs
103 - Multiple fixes to documentation for ipyparallel, simple_prompt and emacs
104 :ghpull:`14384` :ghpull:`14404` :ghpull:`14407`
104 :ghpull:`14384` :ghpull:`14404` :ghpull:`14407`
105 - Maintenance and cleanup of debugger :ghpull:`14387` :ghpull:`14393`
105 - Maintenance and cleanup of debugger :ghpull:`14387` :ghpull:`14393`
106
106
107 As usual you can find the full list of PRs on GitHub under `the 8.24
107 As usual you can find the full list of PRs on GitHub under `the 8.24
108 <https://github.com/ipython/ipython/milestone/131?closed=1>`__ milestone.
108 <https://github.com/ipython/ipython/milestone/131?closed=1>`__ milestone.
109
109
110 Thanks
110 Thanks
111 ------
111 ------
112
112
113 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
113 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
114 work on IPython and related libraries.
114 work on IPython and related libraries.
115
115
116
116
117 .. _version 8.23:
117 .. _version 8.23:
118
118
119 IPython 8.23
119 IPython 8.23
120 ============
120 ============
121
121
122 Super tiny release of IPython on Sunday – a bit later than usual, which is also
122 Super tiny release of IPython on Sunday – a bit later than usual, which is also
123 `πŸ³οΈβ€βš§οΈ International Transgender Day of VisibilityπŸ³οΈβ€βš§οΈ
123 `πŸ³οΈβ€βš§οΈ International Transgender Day of VisibilityπŸ³οΈβ€βš§οΈ
124 <https://en.wikipedia.org/wiki/International_Transgender_Day_of_Visibility>`_ –
124 <https://en.wikipedia.org/wiki/International_Transgender_Day_of_Visibility>`_ –
125 so a though for you on this day, you matter and you are valid [1]_.
125 so a though for you on this day, you matter and you are valid [1]_.
126
126
127 This is a minuscule release with only 5 Pull requests.
127 This is a minuscule release with only 5 Pull requests.
128
128
129 Main change is :ghpull:`14357` which improve inference from return type
129 Main change is :ghpull:`14357` which improve inference from return type
130 annotations in completer and the introduction of the optional target
130 annotations in completer and the introduction of the optional target
131 ``ipython[matplotlib]`` to explicitly request the matplotlib optional
131 ``ipython[matplotlib]`` to explicitly request the matplotlib optional
132 dependencies.
132 dependencies.
133
133
134 As usual you can find the full list of PRs on GitHub under `the 8.23
134 As usual you can find the full list of PRs on GitHub under `the 8.23
135 <https://github.com/ipython/ipython/milestone/130?closed=1>`__ milestone.
135 <https://github.com/ipython/ipython/milestone/130?closed=1>`__ milestone.
136
136
137 Thanks
137 Thanks
138 ------
138 ------
139
139
140 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
140 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
141 work on IPython and related libraries.
141 work on IPython and related libraries.
142
142
143
143
144 .. _version 8.22:
144 .. _version 8.22:
145
145
146 IPython 8.22, 8.22.1 and 8.22.2
146 IPython 8.22, 8.22.1 and 8.22.2
147 ===============================
147 ===============================
148
148
149 Quick release of IPython for this short month of February, with quite a bit of
149 Quick release of IPython for this short month of February, with quite a bit of
150 activity with more than 15 PRs.
150 activity with more than 15 PRs.
151
151
152 I am not going to details all the changes, but among other we have :
152 I am not going to details all the changes, but among other we have :
153
153
154 - More compatibility with emscripten :ghpull:`14316`, :ghpull:`14318`,
154 - More compatibility with emscripten :ghpull:`14316`, :ghpull:`14318`,
155 - Test more downstream project to avoid breakage :ghpull:`14317`
155 - Test more downstream project to avoid breakage :ghpull:`14317`
156 - Fix recently introduced bug with the ``store`` magic.
156 - Fix recently introduced bug with the ``store`` magic.
157 - Fix issues with multiple call to ``matplotlib.pyplot.switch_backend``
157 - Fix issues with multiple call to ``matplotlib.pyplot.switch_backend``
158 - Fix crashing IPython when some tracebacks encounter dynamically evaluated
158 - Fix crashing IPython when some tracebacks encounter dynamically evaluated
159 code.
159 code.
160
160
161 IPython 8.22.1 increase the minimal traitlets version, and 8.22.2 fix a critical
161 IPython 8.22.1 increase the minimal traitlets version, and 8.22.2 fix a critical
162 bug on emscripten preventing to use some magics like ``%matplotlib`` on
162 bug on emscripten preventing to use some magics like ``%matplotlib`` on
163 jupyter-light.
163 jupyter-light.
164
164
165 API changes
165 API changes
166 -----------
166 -----------
167
167
168 One of the largest change is the update the mimehooks and inspector API, see
168 One of the largest change is the update the mimehooks and inspector API, see
169 :ghpull:`14342`. It should be backward compatible, but many hooks now receive a
169 :ghpull:`14342`. It should be backward compatible, but many hooks now receive a
170 single object with many fields allowing us flexibility to update the API later.
170 single object with many fields allowing us flexibility to update the API later.
171
171
172
172
173 Packaging changes
173 Packaging changes
174 -----------------
174 -----------------
175
175
176 Thanks to `@mkoppe <https://github.com/mkoeppe>`__, we are slowly getting rid of
176 Thanks to `@mkoppe <https://github.com/mkoeppe>`__, we are slowly getting rid of
177 setup.py finally migrating to ``pyproject.toml``. There is still quite a bit of
177 setup.py finally migrating to ``pyproject.toml``. There is still quite a bit of
178 work, and please open an issue if you encounter any problem.
178 work, and please open an issue if you encounter any problem.
179
179
180
180
181 Deprecation
181 Deprecation
182 -----------
182 -----------
183
183
184 A number of unused functions have been marked deprecated or pending deprecation.
184 A number of unused functions have been marked deprecated or pending deprecation.
185 Please let us know if you encounter any of those deprecation messages for us to
185 Please let us know if you encounter any of those deprecation messages for us to
186 adjust the removal timeline.
186 adjust the removal timeline.
187
187
188
188
189 Thanks
189 Thanks
190 ------
190 ------
191
191
192 Many thanks to `@mkoppe <https://github.com/mkoeppe>`__ and `@krassowski
192 Many thanks to `@mkoppe <https://github.com/mkoeppe>`__ and `@krassowski
193 <https://github.com/krassowski>`__ for their multiple contributions and codebase
193 <https://github.com/krassowski>`__ for their multiple contributions and codebase
194 cleanup.
194 cleanup.
195
195
196 As usual you can find the full list of PRs on GitHub under `the 8.22
196 As usual you can find the full list of PRs on GitHub under `the 8.22
197 <https://github.com/ipython/ipython/milestone/129?closed=1>`__ milestone.
197 <https://github.com/ipython/ipython/milestone/129?closed=1>`__ milestone.
198
198
199 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
199 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
200 work on IPython and related libraries.
200 work on IPython and related libraries.
201
201
202
202
203 .. _version 8.21:
203 .. _version 8.21:
204
204
205 IPython 8.21
205 IPython 8.21
206 ------------
206 ------------
207
207
208 More substantial release of IPython slightly out of schedule as it was not
208 More substantial release of IPython slightly out of schedule as it was not
209 possible for me to make a release last Friday.
209 possible for me to make a release last Friday.
210
210
211 Few new features are present, but the codebase has been cleaned, and a couple
211 Few new features are present, but the codebase has been cleaned, and a couple
212 of API are _considered_ for deprecation. They are not deprecated yet, but as
212 of API are _considered_ for deprecation. They are not deprecated yet, but as
213 they do not seem to be quite used, they may emit a warning, in which case please
213 they do not seem to be quite used, they may emit a warning, in which case please
214 comment on the relevant issue to inform me of _which_ project use those feature
214 comment on the relevant issue to inform me of _which_ project use those feature
215 and how you use them. Depending on the feedback I might change the timeline for
215 and how you use them. Depending on the feedback I might change the timeline for
216 deprecation.
216 deprecation.
217
217
218 This release saw 14 PRs, with more outside contribution than usual,
218 This release saw 14 PRs, with more outside contribution than usual,
219 I'll note in particular PRs related to making IPython work on emscripten.
219 I'll note in particular PRs related to making IPython work on emscripten.
220
220
221 I also want to point that we are _trying_ to keep compatibility with Python 3.13,
221 I also want to point that we are _trying_ to keep compatibility with Python 3.13,
222 but it's a cat and mouse game. Plus I am low on time, so I would appreciate any
222 but it's a cat and mouse game. Plus I am low on time, so I would appreciate any
223 help with that.
223 help with that.
224
224
225 Deprecations
225 Deprecations
226 ~~~~~~~~~~~~
226 ~~~~~~~~~~~~
227
227
228 - :ghpull:`14307` Pending Deprecation of
228 - :ghpull:`14307` Pending Deprecation of
229 ``ColorSchemeTable.set_active_scheme(...)``'s ``case_sensitive`` Parameter.
229 ``ColorSchemeTable.set_active_scheme(...)``'s ``case_sensitive`` Parameter.
230 - :ghpull:`14305` Pending Deprecation of constructing ``ColorScheme`` via
230 - :ghpull:`14305` Pending Deprecation of constructing ``ColorScheme`` via
231 ``kwargs``, in favor passing a single dict.
231 ``kwargs``, in favor passing a single dict.
232
232
233
233
234 Fixes
234 Fixes
235 ~~~~~
235 ~~~~~
236
236
237 - :ghpull:`14284` TerminalIPythonApp's would warn that ``auto_create`` option is not
237 - :ghpull:`14284` TerminalIPythonApp's would warn that ``auto_create`` option is not
238 recognized.
238 recognized.
239 - :ghpull:`14286` Fix a crash with ``NotOneValueFound`` when rendering complex
239 - :ghpull:`14286` Fix a crash with ``NotOneValueFound`` when rendering complex
240 tracebacks.
240 tracebacks.
241
241
242 - :ghpull:`14287` Partial Python 3.13 compatibility
242 - :ghpull:`14287` Partial Python 3.13 compatibility
243 - :ghpull:`14290` Docs/Typos.
243 - :ghpull:`14290` Docs/Typos.
244
244
245 Changes
245 Changes
246 ~~~~~~~
246 ~~~~~~~
247
247
248 - :ghpull:`14289` ``ipdb.set_trace()`` now accepts ``header=`` for better
248 - :ghpull:`14289` ``ipdb.set_trace()`` now accepts ``header=`` for better
249 compatibility with ``pdb.set_trace()``
249 compatibility with ``pdb.set_trace()``
250
250
251 - :ghpull:`14300` and :ghpull:`14301` Add hooking ability to produce
251 - :ghpull:`14300` and :ghpull:`14301` Add hooking ability to produce
252 mimebundle.
252 mimebundle.
253
253
254 We'll outline :ghpull:`14300`, it is now possible to extend the ``?/??``
254 We'll outline :ghpull:`14300`, it is now possible to extend the ``?/??``
255 operator to return more mimetypes to render richer help in frontends that
255 operator to return more mimetypes to render richer help in frontends that
256 support it. In particular you could send a json representation of the help that
256 support it. In particular you could send a json representation of the help that
257 could be displayed in a customizable way.
257 could be displayed in a customizable way.
258
258
259 Miscellaneous
259 Miscellaneous
260 ~~~~~~~~~~~~~
260 ~~~~~~~~~~~~~
261
261
262 - :ghpull:`14291` Misc Refactor of Color handling
262 - :ghpull:`14291` Misc Refactor of Color handling
263 - :ghpull:`14295` Misc test skip on problematic Pypy versions.
263 - :ghpull:`14295` Misc test skip on problematic Pypy versions.
264
264
265
265
266 Thanks
266 Thanks
267 ~~~~~~
267 ~~~~~~
268
268
269 Special thanks to all our contributors, and to the Pypy team that was extremely
269 Special thanks to all our contributors, and to the Pypy team that was extremely
270 reactive in helping to investigate a fixing a rare unicode+windows bug.
270 reactive in helping to investigate a fixing a rare unicode+windows bug.
271
271
272 As usual you can find the full list of PRs on GitHub under `the 8.21
272 As usual you can find the full list of PRs on GitHub under `the 8.21
273 <https://github.com/ipython/ipython/milestone/128?closed=1>`__ milestone.
273 <https://github.com/ipython/ipython/milestone/128?closed=1>`__ milestone.
274
274
275 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
275 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
276 work on IPython and related libraries.
276 work on IPython and related libraries.
277
277
278
278
279 .. _version 8.20:
279 .. _version 8.20:
280
280
281 IPython 8.20
281 IPython 8.20
282 ------------
282 ------------
283
283
284 Quick IPython release in this beginning of 2024, barely 2 weeks after the previous
284 Quick IPython release in this beginning of 2024, barely 2 weeks after the previous
285 release.
285 release.
286
286
287 This is mostly to fix a backward compatibility issue, I would have done a patch
287 This is mostly to fix a backward compatibility issue, I would have done a patch
288 release earlier if I could. As a few other cleanup are also part of this
288 release earlier if I could. As a few other cleanup are also part of this
289 release, this will get a minor version bump.
289 release, this will get a minor version bump.
290
290
291
291
292 The crux of this release is :ghpull:`14274` (Inspect continuation prompt
292 The crux of this release is :ghpull:`14274` (Inspect continuation prompt
293 signature and pass only viable arguments), the rest of the changes are mostly
293 signature and pass only viable arguments), the rest of the changes are mostly
294 type annotation, and a few compatibility issues with Python 3.13 that are
294 type annotation, and a few compatibility issues with Python 3.13 that are
295 getting addressed.
295 getting addressed.
296
296
297 Python 3.13 compatibility is still not complete (help welcomed).
297 Python 3.13 compatibility is still not complete (help welcomed).
298
298
299 As usual you can find the full list of PRs on GitHub under `the 8.20
299 As usual you can find the full list of PRs on GitHub under `the 8.20
300 <https://github.com/ipython/ipython/milestone/127?closed=1>`__ milestone.
300 <https://github.com/ipython/ipython/milestone/127?closed=1>`__ milestone.
301
301
302 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
302 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
303 work on IPython and related libraries.
303 work on IPython and related libraries.
304
304
305
305
306 .. _version 8.19:
306 .. _version 8.19:
307
307
308 IPython 8.19
308 IPython 8.19
309 ------------
309 ------------
310
310
311 New release of IPython a bit before the end of the month, and end of the year.
311 New release of IPython a bit before the end of the month, and end of the year.
312
312
313 Mostly cleanup and deprecation, due to upstream deprecation and removal.
313 Mostly cleanup and deprecation, due to upstream deprecation and removal.
314
314
315 Remove of Python 3.9 support
315 Remove of Python 3.9 support
316 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
316 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
317
317
318 A bit later than originally plan, IPython 8.19 does not support Python 3.9
318 A bit later than originally plan, IPython 8.19 does not support Python 3.9
319 anymore, as well as the few conditional code that were executing only on Python
319 anymore, as well as the few conditional code that were executing only on Python
320 3.9. :ghpull:`14254`
320 3.9. :ghpull:`14254`
321
321
322 We used the opportunity to deprecate ``IPython.utils.tz`` :ghpull:`14256`, due
322 We used the opportunity to deprecate ``IPython.utils.tz`` :ghpull:`14256`, due
323 to upstream deprecation of some timezone utilities. It will be removed at a later
323 to upstream deprecation of some timezone utilities. It will be removed at a later
324 date.
324 date.
325
325
326 We now also run CI on Python 3.12 (what I likely should have done before), but
326 We now also run CI on Python 3.12 (what I likely should have done before), but
327 running on too many Python version uses a lot of CI time.
327 running on too many Python version uses a lot of CI time.
328
328
329 Absolute and relative Line Numbers in Prompts
329 Absolute and relative Line Numbers in Prompts
330 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
330 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
331
331
332 Thanks to the contribution of ``cohml``, IPython CLI now support absolute and
332 Thanks to the contribution of ``cohml``, IPython CLI now support absolute and
333 relative line numbers in both vi and emacs prompt, use for example
333 relative line numbers in both vi and emacs prompt, use for example
334 ``c.TerminalInteractiveShell.prompt_line_number_format='{line: 4d}/{rel_line:+03d} | '``
334 ``c.TerminalInteractiveShell.prompt_line_number_format='{line: 4d}/{rel_line:+03d} | '``
335 configuration option to display both in a custom format.
335 configuration option to display both in a custom format.
336
336
337 Miscellaneous
337 Miscellaneous
338 ~~~~~~~~~~~~~
338 ~~~~~~~~~~~~~
339
339
340 In addition to various bugfixes, I unpinned pytest, let me know if there are any
340 In addition to various bugfixes, I unpinned pytest, let me know if there are any
341 issues and we'll re-pin.
341 issues and we'll re-pin.
342
342
343 See you in 2024
343 See you in 2024
344 ~~~~~~~~~~~~~~~
344 ~~~~~~~~~~~~~~~
345
345
346 As usual you can find the full list of PRs on GitHub under `the 8.19
346 As usual you can find the full list of PRs on GitHub under `the 8.19
347 <https://github.com/ipython/ipython/milestone/126?closed=1>`__ milestone.
347 <https://github.com/ipython/ipython/milestone/126?closed=1>`__ milestone.
348
348
349 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
349 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
350 work on IPython and related libraries.
350 work on IPython and related libraries.
351
351
352 .. _version 8.18:
352 .. _version 8.18:
353
353
354 IPython 8.18 and 8.18.1
354 IPython 8.18 and 8.18.1
355 -----------------------
355 -----------------------
356
356
357 8.18.1 is identical to 8.18 but pin ``prompt_toolkit`` to greater than ``3.0.41``
357 8.18.1 is identical to 8.18 but pin ``prompt_toolkit`` to greater than ``3.0.41``
358
358
359 Small release of IPython that fixes a small number of inconveniences.
359 Small release of IPython that fixes a small number of inconveniences.
360
360
361 - :ghpull:`14251` Fix a memory leak in qt event loop integration by setting
361 - :ghpull:`14251` Fix a memory leak in qt event loop integration by setting
362 the Loop parent to None.
362 the Loop parent to None.
363 - :ghpull:`14252` Pickleshare was made an optional dependency in 8.17, this
363 - :ghpull:`14252` Pickleshare was made an optional dependency in 8.17, this
364 leads to warnings in some installations when using modules completions. The
364 leads to warnings in some installations when using modules completions. The
365 warning has been silenced.
365 warning has been silenced.
366 - :ghpull:`14241` Update event loop code for compatibility with more recent
366 - :ghpull:`14241` Update event loop code for compatibility with more recent
367 ``prompt_toolkit`` due to deprecations in Python 3.12.
367 ``prompt_toolkit`` due to deprecations in Python 3.12.
368 - :ghpull:`14245` Fix doc example on Pygments styles
368 - :ghpull:`14245` Fix doc example on Pygments styles
369 - :ghpull:`14238` Remove dependency on app_nope, this is actually only a
369 - :ghpull:`14238` Remove dependency on app_nope, this is actually only a
370 dependency of IPykernel.
370 dependency of IPykernel.
371
371
372 As usual you can find the full list of PRs on GitHub under `the 8.18
372 As usual you can find the full list of PRs on GitHub under `the 8.18
373 <https://github.com/ipython/ipython/milestone/125?closed=1>`__ milestone.
373 <https://github.com/ipython/ipython/milestone/125?closed=1>`__ milestone.
374
374
375 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
375 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
376 work on IPython and related libraries.
376 work on IPython and related libraries.
377
377
378 .. _version 8.17.1:
378 .. _version 8.17.1:
379 .. _version 8.17:
379 .. _version 8.17:
380
380
381 IPython 8.17, 8.17.1
381 IPython 8.17, 8.17.1
382 --------------------
382 --------------------
383
383
384 Medium-sized release of IPython that includes some cleanup (backcall, python2 leftovers)
384 Medium-sized release of IPython that includes some cleanup (backcall, python2 leftovers)
385 and some refactoring improvements (typing, pathlib) and a fix on completion.
385 and some refactoring improvements (typing, pathlib) and a fix on completion.
386
386
387 - :ghpull:`14216` remove backcall dependency
387 - :ghpull:`14216` remove backcall dependency
388 - :ghpull:`14217` make pickleshare dependency optional
388 - :ghpull:`14217` make pickleshare dependency optional
389 - :ghpull:`14185` support completion based on type annotations of calls
389 - :ghpull:`14185` support completion based on type annotations of calls
390
390
391 Reverted in 8.17.1:
391 Reverted in 8.17.1:
392
392
393 - :ghpull:`14190` remove support for python 2 in lexers (reverted in 8.17.1 as it is imported by qtconsole/spyder)
393 - :ghpull:`14190` remove support for python 2 in lexers (reverted in 8.17.1 as it is imported by qtconsole/spyder)
394
394
395 Mamba and Micromamba magic
395 .. _ref: mamba-and-micromamba-magic
396 ~~~~~~~~~~~~~~~~~~~~~~~~~~
396 .. _ref: mamba-and-micromamba-magic-commands
397
398 Mamba and Micromamba magic commands
399 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
400
401 In addition to the ``%conda`` magic command for calling ``conda`` in IPython,
402 the ``%mamba`` and ``%micromamba`` magic commands now
403 call ``mamba`` and ``micromamba`` if they are on ``sys.path``.
404
405 .. code:: python
406
407 %mamba install pkgname
408 %micromamba install pkgname
409 %conda install pkgname
410 %pip install pkgname
397
411
398 In addition to the conda command to manage conda environment, mamba and
412 %mamba --help
399 micromamba can now be used using the corresponding magic in IPython.
413 %micromamba --help
400 Since these commands are compatible with conda, they are following the
414 %conda --help
401 same logic.
415 %pip --help # works w/ JupyterLite
416 !pip --help
402
417
403 These two magic require to have the corresponding commands available
404 either in the conda environment or system wide.
405
418
406 :ghpull:`14191`
419 :ghpull:`14191`
407
420
408 ----
421 ----
409
422
410 As usual you can find the full list of PRs on GitHub under `the 8.17
423 As usual you can find the full list of PRs on GitHub under `the 8.17
411 <https://github.com/ipython/ipython/milestone/123?closed=1>`__ milestone.
424 <https://github.com/ipython/ipython/milestone/123?closed=1>`__ milestone.
412
425
413 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
426 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
414 work on IPython and related libraries.
427 work on IPython and related libraries.
415
428
416 .. _version 8.16:
429 .. _version 8.16:
417 .. _version 8.16.1:
430 .. _version 8.16.1:
418
431
419 IPython 8.16, 8.16.1
432 IPython 8.16, 8.16.1
420 --------------------
433 --------------------
421
434
422 Small double release of IPython (with the 8.12.3 release notes just below).
435 Small double release of IPython (with the 8.12.3 release notes just below).
423 Mostly bug fixes and cleanups, and type annotations. Of interest for users:
436 Mostly bug fixes and cleanups, and type annotations. Of interest for users:
424
437
425 - :ghpull:`14153` Fix a bug of the new iPdb chained traceback where some
438 - :ghpull:`14153` Fix a bug of the new iPdb chained traceback where some
426 Exception would not have any traceback. (see upstream fix in CPython for more
439 Exception would not have any traceback. (see upstream fix in CPython for more
427 details).
440 details).
428 - :ghpull:`14168` Fix case with spurious message about event loops when using
441 - :ghpull:`14168` Fix case with spurious message about event loops when using
429 matplotlib.
442 matplotlib.
430
443
431 This PR is in 8.16.0 but reverted in 8.16.1, we'll rework the fix for 8.17
444 This PR is in 8.16.0 but reverted in 8.16.1, we'll rework the fix for 8.17
432
445
433 - :ghpull:`14163` Fix an error where semicolon would not suppress output.
446 - :ghpull:`14163` Fix an error where semicolon would not suppress output.
434
447
435 As usual you can find the full list of PRs on GitHub under `the 8.16
448 As usual you can find the full list of PRs on GitHub under `the 8.16
436 <https://github.com/ipython/ipython/milestone/121?closed=1>`__ and `8.16.1 milestone
449 <https://github.com/ipython/ipython/milestone/121?closed=1>`__ and `8.16.1 milestone
437 <https://github.com/ipython/ipython/milestone/124?closed=1>`__.
450 <https://github.com/ipython/ipython/milestone/124?closed=1>`__.
438
451
439 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
452 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
440 work on IPython and related libraries.
453 work on IPython and related libraries.
441
454
442 .. _version 8.12.3:
455 .. _version 8.12.3:
443
456
444 IPython 8.12.3
457 IPython 8.12.3
445 --------------
458 --------------
446
459
447 Tiny release of 8.12.3 that backport a small number of fixes for users still
460 Tiny release of 8.12.3 that backport a small number of fixes for users still
448 using Python 3.8.
461 using Python 3.8.
449
462
450 - :ghpull:`14080` add passthrough filter shortcuts
463 - :ghpull:`14080` add passthrough filter shortcuts
451 - :ghpull:`14169` Fix `InteractiveShellEmbed`
464 - :ghpull:`14169` Fix `InteractiveShellEmbed`
452
465
453 .. _version 8.15:
466 .. _version 8.15:
454
467
455 IPython 8.15
468 IPython 8.15
456 ------------
469 ------------
457
470
458 Medium release of IPython after a couple of month hiatus, and a bit
471 Medium release of IPython after a couple of month hiatus, and a bit
459 off-schedule.
472 off-schedule.
460
473
461 Among other, IPython 8.15:
474 Among other, IPython 8.15:
462
475
463 - Improve compatibility with future version of Python 3.12/3.13
476 - Improve compatibility with future version of Python 3.12/3.13
464 :ghpull:`14107`, :ghpull:`14139`,
477 :ghpull:`14107`, :ghpull:`14139`,
465 - Improve support for ``ExceptionGroups``, :ghpull:`14108`
478 - Improve support for ``ExceptionGroups``, :ghpull:`14108`
466 - Fix hangs in ``%gui osx``, :ghpull:`14125`
479 - Fix hangs in ``%gui osx``, :ghpull:`14125`
467 - Fix memory lead with ``%reset``, :ghpull:`14133`
480 - Fix memory lead with ``%reset``, :ghpull:`14133`
468 - Unstable config option to modify traceback highlighting that is sometime hard
481 - Unstable config option to modify traceback highlighting that is sometime hard
469 to read :ghpull:`14138`
482 to read :ghpull:`14138`
470 - Support ``.`` in ``ipdb`` as an argument to the ``list`` command
483 - Support ``.`` in ``ipdb`` as an argument to the ``list`` command
471 :ghpull:`14121`
484 :ghpull:`14121`
472 - Workroud ``parso`` showing warning message when the default logger level is
485 - Workroud ``parso`` showing warning message when the default logger level is
473 changed :ghpull:`14119`
486 changed :ghpull:`14119`
474 - Fix multiple issues with matplotlib interactive mode, qt5/qt6 :ghpull:`14128`
487 - Fix multiple issues with matplotlib interactive mode, qt5/qt6 :ghpull:`14128`
475
488
476 Support for PEP-678 Exception Notes
489 Support for PEP-678 Exception Notes
477 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
490 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
478
491
479 Ultratb now shows :pep:`678` notes, improving your debugging experience on
492 Ultratb now shows :pep:`678` notes, improving your debugging experience on
480 Python 3.11+ or with libraries such as Pytest and Hypothesis.
493 Python 3.11+ or with libraries such as Pytest and Hypothesis.
481
494
482 Native fallback for displaying ExceptionGroup
495 Native fallback for displaying ExceptionGroup
483 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
496 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
484 ExceptionGroups are now displayed with ``traceback.print_exc``, as a temporary fix until UltraTB properly supports displaying child exceptions.
497 ExceptionGroups are now displayed with ``traceback.print_exc``, as a temporary fix until UltraTB properly supports displaying child exceptions.
485
498
486
499
487 We have two larger features:
500 We have two larger features:
488
501
489 AST-based macros
502 AST-based macros
490 ~~~~~~~~~~~~~~~~
503 ~~~~~~~~~~~~~~~~
491
504
492 :ghpull:`14100` introduce a new and efficient way to modify each execution block
505 :ghpull:`14100` introduce a new and efficient way to modify each execution block
493 (cell) using an template-ast-based transform. Unlike IPython pre and post code
506 (cell) using an template-ast-based transform. Unlike IPython pre and post code
494 execution hooks, this actually transform the code that is execute with as
507 execution hooks, this actually transform the code that is execute with as
495 minimal as possible overhead. While it was already technically possible to
508 minimal as possible overhead. While it was already technically possible to
496 register ast transformers for IPython this was far from evident.
509 register ast transformers for IPython this was far from evident.
497
510
498 This should make it trivial to hook into IPython to implement custom hooks, that
511 This should make it trivial to hook into IPython to implement custom hooks, that
499 for example time or profile your code, catch exceptions to provide error
512 for example time or profile your code, catch exceptions to provide error
500 messages for students or do any other kind of transformations.
513 messages for students or do any other kind of transformations.
501
514
502 In addition to programmatic API there is also a magic to quickly register
515 In addition to programmatic API there is also a magic to quickly register
503 hooks::
516 hooks::
504
517
505 In [1]: %%code_wrap before_after
518 In [1]: %%code_wrap before_after
506 ...: print('before')
519 ...: print('before')
507 ...: __code__
520 ...: __code__
508 ...: print('after')
521 ...: print('after')
509 ...: __ret__
522 ...: __ret__
510
523
511 This mean that for any subsequent execution code will be executed.
524 This mean that for any subsequent execution code will be executed.
512 You can modify the above to print the date, compute the execution time,
525 You can modify the above to print the date, compute the execution time,
513 retry the code in a for loop....
526 retry the code in a for loop....
514
527
515
528
516 Allow IPdb/Pdb to move between chained exceptions
529 Allow IPdb/Pdb to move between chained exceptions
517 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
530 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
518
531
519 The main change is the addition of the ability to move between chained
532 The main change is the addition of the ability to move between chained
520 exceptions when using IPdb, this feature was also contributed to upstream Pdb
533 exceptions when using IPdb, this feature was also contributed to upstream Pdb
521 and is thus native to CPython in Python 3.13+ Though ipdb should support this
534 and is thus native to CPython in Python 3.13+ Though ipdb should support this
522 feature in older version of Python. I invite you to look at the `CPython changes
535 feature in older version of Python. I invite you to look at the `CPython changes
523 and docs <https://github.com/python/cpython/pull/106676>`__ for more details.
536 and docs <https://github.com/python/cpython/pull/106676>`__ for more details.
524
537
525 In short, once in post-mortem debugger (``%debug``), you can use the ipdb
538 In short, once in post-mortem debugger (``%debug``), you can use the ipdb
526 ``exceptions`` command to switch exceptions, for example:
539 ``exceptions`` command to switch exceptions, for example:
527
540
528 .. code-block:: ipython
541 .. code-block:: ipython
529
542
530 In [1]: def foo(x):
543 In [1]: def foo(x):
531 ...: try:
544 ...: try:
532 ...: bar(x)
545 ...: bar(x)
533 ...: except Exception as e:
546 ...: except Exception as e:
534 ...: raise ValueError("foo (): bar failed") from e
547 ...: raise ValueError("foo (): bar failed") from e
535 ...:
548 ...:
536 ...: def bar(x):
549 ...: def bar(x):
537 ...: 1 / X
550 ...: 1 / X
538 ...:
551 ...:
539
552
540 In [2]: foo(0)
553 In [2]: foo(0)
541 ---------------------------------------------------------------------------
554 ---------------------------------------------------------------------------
542 NameError Traceback (most recent call last)
555 NameError Traceback (most recent call last)
543 Cell In[1], line 3, in foo(x)
556 Cell In[1], line 3, in foo(x)
544 2 try:
557 2 try:
545 ----> 3 bar(x)
558 ----> 3 bar(x)
546 4 except Exception as e:
559 4 except Exception as e:
547
560
548 Cell In[1], line 9, in bar(x)
561 Cell In[1], line 9, in bar(x)
549 8 def bar(x):
562 8 def bar(x):
550 ----> 9 1 / X
563 ----> 9 1 / X
551
564
552 NameError: name 'X' is not defined
565 NameError: name 'X' is not defined
553
566
554 The above exception was the direct cause of the following exception:
567 The above exception was the direct cause of the following exception:
555
568
556 ValueError Traceback (most recent call last)
569 ValueError Traceback (most recent call last)
557 Cell In[2], line 1
570 Cell In[2], line 1
558 ----> 1 foo(0)
571 ----> 1 foo(0)
559
572
560 Cell In[1], line 5, in foo(x)
573 Cell In[1], line 5, in foo(x)
561 3 bar(x)
574 3 bar(x)
562 4 except Exception as e:
575 4 except Exception as e:
563 ----> 5 raise ValueError("foo (): bar failed") from e
576 ----> 5 raise ValueError("foo (): bar failed") from e
564
577
565 ValueError: foo (): bar failed
578 ValueError: foo (): bar failed
566
579
567 In [3]: %debug
580 In [3]: %debug
568 > <ipython-input-1-b0bbdc271ffb>(5)foo()
581 > <ipython-input-1-b0bbdc271ffb>(5)foo()
569 3 bar(x)
582 3 bar(x)
570 4 except Exception as e:
583 4 except Exception as e:
571 ----> 5 raise ValueError("foo (): bar failed") from e
584 ----> 5 raise ValueError("foo (): bar failed") from e
572
585
573 In previous ipdb you could not go into the bar error, now from within pdb you
586 In previous ipdb you could not go into the bar error, now from within pdb you
574 can use ``exceptions``:
587 can use ``exceptions``:
575
588
576 .. code-block:: ipython
589 .. code-block:: ipython
577
590
578 ipdb> exceptions
591 ipdb> exceptions
579 0 NameError("name 'X' is not defined")
592 0 NameError("name 'X' is not defined")
580 > 1 ValueError('foo (): bar failed')
593 > 1 ValueError('foo (): bar failed')
581
594
582 ipdb> exceptions 0
595 ipdb> exceptions 0
583 > <ipython-input-1-b0bbdc271ffb>(9)bar()
596 > <ipython-input-1-b0bbdc271ffb>(9)bar()
584 6
597 6
585 7
598 7
586 8 def bar(x):
599 8 def bar(x):
587 ----> 9 1 / X
600 ----> 9 1 / X
588 10
601 10
589
602
590 ipdb>
603 ipdb>
591
604
592 In particular I want to thank the `D.E. Shaw group <https://www.deshaw.com/>`__
605 In particular I want to thank the `D.E. Shaw group <https://www.deshaw.com/>`__
593 for suggesting and funding the two largest feature as well as many bug fixes of
606 for suggesting and funding the two largest feature as well as many bug fixes of
594 this release.
607 this release.
595
608
596 As usual you can find the full list of PRs on GitHub under `the 8.15 milestone
609 As usual you can find the full list of PRs on GitHub under `the 8.15 milestone
597 <https://github.com/ipython/ipython/milestone/120?closed=1>`__.
610 <https://github.com/ipython/ipython/milestone/120?closed=1>`__.
598
611
599
612
600
613
601 .. _version 8.14:
614 .. _version 8.14:
602
615
603 IPython 8.14
616 IPython 8.14
604 ------------
617 ------------
605
618
606 Small release of IPython.
619 Small release of IPython.
607
620
608 - :ghpull:`14080` fixes some shortcuts issues.
621 - :ghpull:`14080` fixes some shortcuts issues.
609 - :ghpull:`14056` Add option to ``%autoreload`` to hide errors when reloading code. This will be the default for spyder
622 - :ghpull:`14056` Add option to ``%autoreload`` to hide errors when reloading code. This will be the default for spyder
610 user is my understanding.
623 user is my understanding.
611 - :ghpull:`14039` (and :ghpull:`14040`) to show exception notes in tracebacks.
624 - :ghpull:`14039` (and :ghpull:`14040`) to show exception notes in tracebacks.
612
625
613 - :ghpull:`14076` Add option to EventManager to prevent printing
626 - :ghpull:`14076` Add option to EventManager to prevent printing
614
627
615
628
616 SPEC 0 and SPEC 4
629 SPEC 0 and SPEC 4
617 ~~~~~~~~~~~~~~~~~
630 ~~~~~~~~~~~~~~~~~
618
631
619 You've heard about the NEPs, (NumPy enhancement Proposal), having a NEP for something non-numpy specific was sometime confusing.
632 You've heard about the NEPs, (NumPy enhancement Proposal), having a NEP for something non-numpy specific was sometime confusing.
620 Long live the `SPECs <https://scientific-python.org/specs/>`_.
633 Long live the `SPECs <https://scientific-python.org/specs/>`_.
621
634
622 We are now trying to follow SPEC 0 (aka old NEP 29) for support of upstream libraries.
635 We are now trying to follow SPEC 0 (aka old NEP 29) for support of upstream libraries.
623
636
624 We also now try to follow SPEC 4 (test and publish nightly on a centralized nightly repository).
637 We also now try to follow SPEC 4 (test and publish nightly on a centralized nightly repository).
625 We encourage you to do so as well in order to report breakage, and contribute to the SPEC process !
638 We encourage you to do so as well in order to report breakage, and contribute to the SPEC process !
626
639
627
640
628 Python 3.12 compatibility ?
641 Python 3.12 compatibility ?
629 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
642 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
630
643
631 Python 3.12 changed its tokenizer to have better support for f-strings and allow arbitrary expression.
644 Python 3.12 changed its tokenizer to have better support for f-strings and allow arbitrary expression.
632 This is a great new feature and performance improvement in Python 3.12.
645 This is a great new feature and performance improvement in Python 3.12.
633
646
634 Unfortunately this means the new tokenizer does not support incomplete or invalid Python which will
647 Unfortunately this means the new tokenizer does not support incomplete or invalid Python which will
635 break many features of IPython. Thus compatibility of IPython with Python 3.12 is not guarantied.
648 break many features of IPython. Thus compatibility of IPython with Python 3.12 is not guarantied.
636 It is unclear to which extent IPython is affected, and whether we can/should try to still support magics, shell
649 It is unclear to which extent IPython is affected, and whether we can/should try to still support magics, shell
637 escape (``! ....``), ..., as well as how to do it if we can.
650 escape (``! ....``), ..., as well as how to do it if we can.
638
651
639 In addition even if we there is technical feasibility to do so, it is no clear we have the resources to do it.
652 In addition even if we there is technical feasibility to do so, it is no clear we have the resources to do it.
640 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
653 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
641 features are critical.
654 features are critical.
642
655
643 We are not going to pin IPython to Python ``<3.12`` as otherwise on install pip would downgrade/resolve to IPython 8.13,
656 We are not going to pin IPython to Python ``<3.12`` as otherwise on install pip would downgrade/resolve to IPython 8.13,
644 so if you plan to update to Python 3.12 after its release, we encourage for extra care.
657 so if you plan to update to Python 3.12 after its release, we encourage for extra care.
645
658
646
659
647 .. _version 8.13.1:
660 .. _version 8.13.1:
648 .. _version 8.13.2:
661 .. _version 8.13.2:
649 .. _version 8.12.2:
662 .. _version 8.12.2:
650
663
651 IPython 8.13.1, 8.13.2 and 8.12.2
664 IPython 8.13.1, 8.13.2 and 8.12.2
652 ---------------------------------
665 ---------------------------------
653
666
654 3 quick in succession patch release of IPython in addition to IPython 8.13.0
667 3 quick in succession patch release of IPython in addition to IPython 8.13.0
655 having been yanked.
668 having been yanked.
656
669
657 IPython 8.13.0 was improperly tagged as still compatible with Python 3.8, and
670 IPython 8.13.0 was improperly tagged as still compatible with Python 3.8, and
658 still had some mention of compatibility with 3.8. IPython 8.13.1 is identical to
671 still had some mention of compatibility with 3.8. IPython 8.13.1 is identical to
659 8.13 but with the exception of being correctly tagged. This release and yank was
672 8.13 but with the exception of being correctly tagged. This release and yank was
660 mostly done to fix CI.
673 mostly done to fix CI.
661
674
662 IPython 8.12.2 and 8.13.2 contain UI fixes, with respect to right arrow not
675 IPython 8.12.2 and 8.13.2 contain UI fixes, with respect to right arrow not
663 working in some case in the terminal, and 8.12.2 contain also a requested
676 working in some case in the terminal, and 8.12.2 contain also a requested
664 backport of :ghpull:`14029` (Allow safe access to the ``__getattribute__``
677 backport of :ghpull:`14029` (Allow safe access to the ``__getattribute__``
665 method of modules) for tab completion.
678 method of modules) for tab completion.
666
679
667 .. _version 8.13:
680 .. _version 8.13:
668
681
669 IPython 8.13
682 IPython 8.13
670 ------------
683 ------------
671
684
672 As usual for the end of the month, minor release of IPython. This release is
685 As usual for the end of the month, minor release of IPython. This release is
673 significant in that it not only has a number of bugfixes, but also drop support
686 significant in that it not only has a number of bugfixes, but also drop support
674 for Python 3.8 as per NEP 29 (:ghpull:`14023`).
687 for Python 3.8 as per NEP 29 (:ghpull:`14023`).
675
688
676 All the critical bugfixes have been backported onto the 8.12.1 release (see
689 All the critical bugfixes have been backported onto the 8.12.1 release (see
677 below). In addition to that went into 8.12.1 you'll find:
690 below). In addition to that went into 8.12.1 you'll find:
678
691
679 - Pretty representation for ``Counter`` has been fixed to match the Python one
692 - Pretty representation for ``Counter`` has been fixed to match the Python one
680 and be in decreasing order. :ghpull:`14032`
693 and be in decreasing order. :ghpull:`14032`
681 - Module completion is better when jedi is disabled :ghpull:`14029`.
694 - Module completion is better when jedi is disabled :ghpull:`14029`.
682 - Improvement of ``%%bash`` magic that would get stuck :ghpull:`14019`
695 - Improvement of ``%%bash`` magic that would get stuck :ghpull:`14019`
683
696
684
697
685 We hope you enjoy this release an will maybe see you at JupyterCon in less than
698 We hope you enjoy this release an will maybe see you at JupyterCon in less than
686 two weeks.
699 two weeks.
687
700
688 As usual you can find the full list of PRs on GitHub under `the 8.13 milestone
701 As usual you can find the full list of PRs on GitHub under `the 8.13 milestone
689 <https://github.com/ipython/ipython/milestone/115?closed=1>`__.
702 <https://github.com/ipython/ipython/milestone/115?closed=1>`__.
690
703
691 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
704 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
692 work on IPython and related libraries.
705 work on IPython and related libraries.
693
706
694
707
695 .. _version 8.12.1:
708 .. _version 8.12.1:
696
709
697 IPython 8.12.1
710 IPython 8.12.1
698 --------------
711 --------------
699
712
700 This is the twin release of IPython 8.13 that contain only critical UI and bug
713 This is the twin release of IPython 8.13 that contain only critical UI and bug
701 fixes. The next minor version of IPython has dropped support for Python 3.8 – as
714 fixes. The next minor version of IPython has dropped support for Python 3.8 – as
702 per Nep 29 and this IPython 8.12.x will now only receive bugfixes.
715 per Nep 29 and this IPython 8.12.x will now only receive bugfixes.
703
716
704
717
705 - :ghpull:`14004` Fix a bug introduced in IPython 8.12 that crash when
718 - :ghpull:`14004` Fix a bug introduced in IPython 8.12 that crash when
706 inspecting some docstrings.
719 inspecting some docstrings.
707 - :ghpull:`14010` Fix fast traceback code that was not working in some case.
720 - :ghpull:`14010` Fix fast traceback code that was not working in some case.
708 - :ghpull:`14014` Fix ``%page`` magic broken in some case.
721 - :ghpull:`14014` Fix ``%page`` magic broken in some case.
709 - :ghpull:`14026`, :ghpull:`14027` Tweak default shortcut with respect to
722 - :ghpull:`14026`, :ghpull:`14027` Tweak default shortcut with respect to
710 autosuggestions.
723 autosuggestions.
711 - :ghpull:`14033` add back the ability to use ``.get()`` on OInfo object for
724 - :ghpull:`14033` add back the ability to use ``.get()`` on OInfo object for
712 backward compatibility with h5py (this will be re-deprecated later, and h5py
725 backward compatibility with h5py (this will be re-deprecated later, and h5py
713 will also get a fix).
726 will also get a fix).
714
727
715 As usual you can find the full list of PRs on GitHub under `the 8.12.1 milestone
728 As usual you can find the full list of PRs on GitHub under `the 8.12.1 milestone
716 <https://github.com/ipython/ipython/milestone/116?closed=1>`__.
729 <https://github.com/ipython/ipython/milestone/116?closed=1>`__.
717
730
718 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
731 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
719 work on IPython and related libraries.
732 work on IPython and related libraries.
720
733
721 .. _version 8.12.0:
734 .. _version 8.12.0:
722
735
723 IPython 8.12
736 IPython 8.12
724 ------------
737 ------------
725
738
726 Hopefully slightly early release for IPython 8.12. Last Thursday of the month,
739 Hopefully slightly early release for IPython 8.12. Last Thursday of the month,
727 even if I guess it's likely already Friday somewhere in the pacific ocean.
740 even if I guess it's likely already Friday somewhere in the pacific ocean.
728
741
729 A number of PRs and bug fixes this month with close to 20 PRs merged !
742 A number of PRs and bug fixes this month with close to 20 PRs merged !
730
743
731
744
732 The IPython repo reached :ghpull:`14000` !! Actually the PR that create those exact release
745 The IPython repo reached :ghpull:`14000` !! Actually the PR that create those exact release
733 note is :ghpull:`14000`. Ok, more issues and PR is not always better, and I'd
746 note is :ghpull:`14000`. Ok, more issues and PR is not always better, and I'd
734 love to have more time to close issues and Pull Requests.
747 love to have more time to close issues and Pull Requests.
735
748
736 Let's note that in less than 2 month JupyterCon is back, in Paris please visit
749 Let's note that in less than 2 month JupyterCon is back, in Paris please visit
737 `jupytercon.com <https://jupytercon.com>`__, and looking forward to see you
750 `jupytercon.com <https://jupytercon.com>`__, and looking forward to see you
738 there.
751 there.
739
752
740 Packagers should take note that ``typing_extension`` is now a mandatory dependency
753 Packagers should take note that ``typing_extension`` is now a mandatory dependency
741 for Python versions ``<3.10``.
754 for Python versions ``<3.10``.
742
755
743
756
744
757
745 Let's note also that according to `NEP29
758 Let's note also that according to `NEP29
746 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`__, It is soon time to
759 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`__, It is soon time to
747 stop support for Python 3.8 that will be release more than 3 and 1/2 years ago::
760 stop support for Python 3.8 that will be release more than 3 and 1/2 years ago::
748
761
749 On Apr 14, 2023 drop support for Python 3.8 (initially released on Oct 14, 2019)
762 On Apr 14, 2023 drop support for Python 3.8 (initially released on Oct 14, 2019)
750
763
751 Thus I am likely to stop advertising support for Python 3.8 in the next
764 Thus I am likely to stop advertising support for Python 3.8 in the next
752 release at the end of April.
765 release at the end of April.
753
766
754
767
755 Here are some miscellaneous updates of interest:
768 Here are some miscellaneous updates of interest:
756
769
757 - :ghpull:`13957` brings updates to the Qt integration, particularly for Qt6.
770 - :ghpull:`13957` brings updates to the Qt integration, particularly for Qt6.
758 - :ghpull:`13960` fixes the %debug magic command to give access to the local
771 - :ghpull:`13960` fixes the %debug magic command to give access to the local
759 scope.
772 scope.
760 - :ghpull:`13964` fixes some crashes with the new fast traceback code. Note that
773 - :ghpull:`13964` fixes some crashes with the new fast traceback code. Note that
761 there are still some issues with the fast traceback code, and I a, likely
774 there are still some issues with the fast traceback code, and I a, likely
762 to fix and tweak behavior.
775 to fix and tweak behavior.
763 - :ghpull:`13973` We are slowly migrating IPython internals to use proper type
776 - :ghpull:`13973` We are slowly migrating IPython internals to use proper type
764 objects/dataclasses instead of dictionaries to allow static typing checks.
777 objects/dataclasses instead of dictionaries to allow static typing checks.
765 These are technically public API and could lead to breakage, so please let us
778 These are technically public API and could lead to breakage, so please let us
766 know if that's the case and I'll mitigate.
779 know if that's the case and I'll mitigate.
767 - :ghpull:`13990`, :ghpull:`13991`, :ghpull:`13994` all improve keybinding and
780 - :ghpull:`13990`, :ghpull:`13991`, :ghpull:`13994` all improve keybinding and
768 shortcut configurability.
781 shortcut configurability.
769
782
770 As usual you can find the full list of PRs on GitHub under `the 8.12 milestone
783 As usual you can find the full list of PRs on GitHub under `the 8.12 milestone
771 <https://github.com/ipython/ipython/milestone/114?closed=1>`__.
784 <https://github.com/ipython/ipython/milestone/114?closed=1>`__.
772
785
773 We want to thank the D.E. Shaw group for requesting and sponsoring the work on
786 We want to thank the D.E. Shaw group for requesting and sponsoring the work on
774 the following big feature. We had productive discussions on how to best expose
787 the following big feature. We had productive discussions on how to best expose
775 this feature
788 this feature
776
789
777 Dynamic documentation dispatch
790 Dynamic documentation dispatch
778 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
791 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
779
792
780 We are experimenting with dynamic documentation dispatch for object attribute.
793 We are experimenting with dynamic documentation dispatch for object attribute.
781 See :ghissue:`13860`. The goal is to allow object to define documentation for
794 See :ghissue:`13860`. The goal is to allow object to define documentation for
782 their attributes, properties, even when those are dynamically defined with
795 their attributes, properties, even when those are dynamically defined with
783 `__getattr__`.
796 `__getattr__`.
784
797
785 In particular when those objects are base types it can be useful to show the
798 In particular when those objects are base types it can be useful to show the
786 documentation
799 documentation
787
800
788
801
789 .. code-block:: ipython
802 .. code-block:: ipython
790
803
791
804
792 In [1]: class User:
805 In [1]: class User:
793 ...:
806 ...:
794 ...: __custom_documentations__ = {
807 ...: __custom_documentations__ = {
795 ...: "first": "The first name of the user.",
808 ...: "first": "The first name of the user.",
796 ...: "last": "The last name of the user.",
809 ...: "last": "The last name of the user.",
797 ...: }
810 ...: }
798 ...:
811 ...:
799 ...: first:str
812 ...: first:str
800 ...: last:str
813 ...: last:str
801 ...:
814 ...:
802 ...: def __init__(self, first, last):
815 ...: def __init__(self, first, last):
803 ...: self.first = first
816 ...: self.first = first
804 ...: self.last = last
817 ...: self.last = last
805 ...:
818 ...:
806 ...: @property
819 ...: @property
807 ...: def full(self):
820 ...: def full(self):
808 ...: """`self.first` and `self.last` joined by a space."""
821 ...: """`self.first` and `self.last` joined by a space."""
809 ...: return self.first + " " + self.last
822 ...: return self.first + " " + self.last
810 ...:
823 ...:
811 ...:
824 ...:
812 ...: user = Person('Jane', 'Doe')
825 ...: user = Person('Jane', 'Doe')
813
826
814 In [2]: user.first?
827 In [2]: user.first?
815 Type: str
828 Type: str
816 String form: Jane
829 String form: Jane
817 Length: 4
830 Length: 4
818 Docstring: the first name of a the person object, a str
831 Docstring: the first name of a the person object, a str
819 Class docstring:
832 Class docstring:
820 ....
833 ....
821
834
822 In [3]: user.last?
835 In [3]: user.last?
823 Type: str
836 Type: str
824 String form: Doe
837 String form: Doe
825 Length: 3
838 Length: 3
826 Docstring: the last name, also a str
839 Docstring: the last name, also a str
827 ...
840 ...
828
841
829
842
830 We can see here the symmetry with IPython looking for the docstring on the
843 We can see here the symmetry with IPython looking for the docstring on the
831 properties:
844 properties:
832
845
833 .. code-block:: ipython
846 .. code-block:: ipython
834
847
835
848
836 In [4]: user.full?
849 In [4]: user.full?
837 HERE
850 HERE
838 Type: property
851 Type: property
839 String form: <property object at 0x102bb15d0>
852 String form: <property object at 0x102bb15d0>
840 Docstring: first and last join by a space
853 Docstring: first and last join by a space
841
854
842
855
843 Note that while in the above example we use a static dictionary, libraries may
856 Note that while in the above example we use a static dictionary, libraries may
844 decide to use a custom object that define ``__getitem__``, we caution against
857 decide to use a custom object that define ``__getitem__``, we caution against
845 using objects that would trigger computation to show documentation, but it is
858 using objects that would trigger computation to show documentation, but it is
846 sometime preferable for highly dynamic code that for example export ans API as
859 sometime preferable for highly dynamic code that for example export ans API as
847 object.
860 object.
848
861
849
862
850
863
851 .. _version 8.11.0:
864 .. _version 8.11.0:
852
865
853 IPython 8.11
866 IPython 8.11
854 ------------
867 ------------
855
868
856 Back on almost regular monthly schedule for IPython with end-of-month
869 Back on almost regular monthly schedule for IPython with end-of-month
857 really-late-Friday release to make sure some bugs are properly fixed.
870 really-late-Friday release to make sure some bugs are properly fixed.
858 Small addition of with a few new features, bugfix and UX improvements.
871 Small addition of with a few new features, bugfix and UX improvements.
859
872
860 This is a non-exhaustive list, but among other you will find:
873 This is a non-exhaustive list, but among other you will find:
861
874
862 Faster Traceback Highlighting
875 Faster Traceback Highlighting
863 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
876 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
864
877
865 Resurrection of pre-IPython-8 traceback highlighting code.
878 Resurrection of pre-IPython-8 traceback highlighting code.
866
879
867 Really long and complicated files were slow to highlight in traceback with
880 Really long and complicated files were slow to highlight in traceback with
868 IPython 8 despite upstream improvement that make many case better. Therefore
881 IPython 8 despite upstream improvement that make many case better. Therefore
869 starting with IPython 8.11 when one of the highlighted file is more than 10 000
882 starting with IPython 8.11 when one of the highlighted file is more than 10 000
870 line long by default, we'll fallback to a faster path that does not have all the
883 line long by default, we'll fallback to a faster path that does not have all the
871 features of highlighting failing AST nodes.
884 features of highlighting failing AST nodes.
872
885
873 This can be configures by setting the value of
886 This can be configures by setting the value of
874 ``IPython.code.ultratb.FAST_THRESHOLD`` to an arbitrary low or large value.
887 ``IPython.code.ultratb.FAST_THRESHOLD`` to an arbitrary low or large value.
875
888
876
889
877 Autoreload verbosity
890 Autoreload verbosity
878 ~~~~~~~~~~~~~~~~~~~~
891 ~~~~~~~~~~~~~~~~~~~~
879
892
880 We introduce more descriptive names for the ``%autoreload`` parameter:
893 We introduce more descriptive names for the ``%autoreload`` parameter:
881
894
882 - ``%autoreload now`` (also ``%autoreload``) - perform autoreload immediately.
895 - ``%autoreload now`` (also ``%autoreload``) - perform autoreload immediately.
883 - ``%autoreload off`` (also ``%autoreload 0``) - turn off autoreload.
896 - ``%autoreload off`` (also ``%autoreload 0``) - turn off autoreload.
884 - ``%autoreload explicit`` (also ``%autoreload 1``) - turn on autoreload only for modules
897 - ``%autoreload explicit`` (also ``%autoreload 1``) - turn on autoreload only for modules
885 whitelisted by ``%aimport`` statements.
898 whitelisted by ``%aimport`` statements.
886 - ``%autoreload all`` (also ``%autoreload 2``) - turn on autoreload for all modules except those
899 - ``%autoreload all`` (also ``%autoreload 2``) - turn on autoreload for all modules except those
887 blacklisted by ``%aimport`` statements.
900 blacklisted by ``%aimport`` statements.
888 - ``%autoreload complete`` (also ``%autoreload 3``) - all the fatures of ``all`` but also adding new
901 - ``%autoreload complete`` (also ``%autoreload 3``) - all the fatures of ``all`` but also adding new
889 objects from the imported modules (see
902 objects from the imported modules (see
890 IPython/extensions/tests/test_autoreload.py::test_autoload_newly_added_objects).
903 IPython/extensions/tests/test_autoreload.py::test_autoload_newly_added_objects).
891
904
892 The original designations (e.g. "2") still work, and these new ones are case-insensitive.
905 The original designations (e.g. "2") still work, and these new ones are case-insensitive.
893
906
894 Additionally, the option ``--print`` or ``-p`` can be added to the line to print the names of
907 Additionally, the option ``--print`` or ``-p`` can be added to the line to print the names of
895 modules being reloaded. Similarly, ``--log`` or ``-l`` will output the names to the logger at INFO
908 modules being reloaded. Similarly, ``--log`` or ``-l`` will output the names to the logger at INFO
896 level. Both can be used simultaneously.
909 level. Both can be used simultaneously.
897
910
898 The parsing logic for ``%aimport`` is now improved such that modules can be whitelisted and
911 The parsing logic for ``%aimport`` is now improved such that modules can be whitelisted and
899 blacklisted in the same line, e.g. it's now possible to call ``%aimport os, -math`` to include
912 blacklisted in the same line, e.g. it's now possible to call ``%aimport os, -math`` to include
900 ``os`` for ``%autoreload explicit`` and exclude ``math`` for modes ``all`` and ``complete``.
913 ``os`` for ``%autoreload explicit`` and exclude ``math`` for modes ``all`` and ``complete``.
901
914
902 Terminal shortcuts customization
915 Terminal shortcuts customization
903 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
916 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
904
917
905 Previously modifying shortcuts was only possible by hooking into startup files
918 Previously modifying shortcuts was only possible by hooking into startup files
906 and practically limited to adding new shortcuts or removing all shortcuts bound
919 and practically limited to adding new shortcuts or removing all shortcuts bound
907 to a specific key. This release enables users to override existing terminal
920 to a specific key. This release enables users to override existing terminal
908 shortcuts, disable them or add new keybindings.
921 shortcuts, disable them or add new keybindings.
909
922
910 For example, to set the :kbd:`right` to accept a single character of auto-suggestion
923 For example, to set the :kbd:`right` to accept a single character of auto-suggestion
911 you could use::
924 you could use::
912
925
913 my_shortcuts = [
926 my_shortcuts = [
914 {
927 {
915 "command": "IPython:auto_suggest.accept_character",
928 "command": "IPython:auto_suggest.accept_character",
916 "new_keys": ["right"]
929 "new_keys": ["right"]
917 }
930 }
918 ]
931 ]
919 %config TerminalInteractiveShell.shortcuts = my_shortcuts
932 %config TerminalInteractiveShell.shortcuts = my_shortcuts
920
933
921 You can learn more in :std:configtrait:`TerminalInteractiveShell.shortcuts`
934 You can learn more in :std:configtrait:`TerminalInteractiveShell.shortcuts`
922 configuration reference.
935 configuration reference.
923
936
924 Miscellaneous
937 Miscellaneous
925 ~~~~~~~~~~~~~
938 ~~~~~~~~~~~~~
926
939
927 - ``%gui`` should now support PySide6. :ghpull:`13864`
940 - ``%gui`` should now support PySide6. :ghpull:`13864`
928 - Cli shortcuts can now be configured :ghpull:`13928`, see above.
941 - Cli shortcuts can now be configured :ghpull:`13928`, see above.
929 (note that there might be an issue with prompt_toolkit 3.0.37 and shortcut configuration).
942 (note that there might be an issue with prompt_toolkit 3.0.37 and shortcut configuration).
930
943
931 - Capture output should now respect ``;`` semicolon to suppress output.
944 - Capture output should now respect ``;`` semicolon to suppress output.
932 :ghpull:`13940`
945 :ghpull:`13940`
933 - Base64 encoded images (in jupyter frontend), will not have trailing newlines.
946 - Base64 encoded images (in jupyter frontend), will not have trailing newlines.
934 :ghpull:`13941`
947 :ghpull:`13941`
935
948
936 As usual you can find the full list of PRs on GitHub under `the 8.11 milestone
949 As usual you can find the full list of PRs on GitHub under `the 8.11 milestone
937 <https://github.com/ipython/ipython/milestone/113?closed=1>`__.
950 <https://github.com/ipython/ipython/milestone/113?closed=1>`__.
938
951
939 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
952 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
940 work on IPython and related libraries.
953 work on IPython and related libraries.
941
954
942 .. _version 8.10.0:
955 .. _version 8.10.0:
943
956
944 IPython 8.10
957 IPython 8.10
945 ------------
958 ------------
946
959
947 Out of schedule release of IPython with minor fixes to patch a potential CVE-2023-24816.
960 Out of schedule release of IPython with minor fixes to patch a potential CVE-2023-24816.
948 This is a really low severity CVE that you most likely are not affected by unless:
961 This is a really low severity CVE that you most likely are not affected by unless:
949
962
950 - You are on windows.
963 - You are on windows.
951 - You have a custom build of Python without ``_ctypes``
964 - You have a custom build of Python without ``_ctypes``
952 - You cd or start IPython or Jupyter in untrusted directory which names may be
965 - You cd or start IPython or Jupyter in untrusted directory which names may be
953 valid shell commands.
966 valid shell commands.
954
967
955 You can read more on `the advisory
968 You can read more on `the advisory
956 <https://github.com/ipython/ipython/security/advisories/GHSA-29gw-9793-fvw7>`__.
969 <https://github.com/ipython/ipython/security/advisories/GHSA-29gw-9793-fvw7>`__.
957
970
958 In addition to fixing this CVE we also fix a couple of outstanding bugs and issues.
971 In addition to fixing this CVE we also fix a couple of outstanding bugs and issues.
959
972
960 As usual you can find the full list of PRs on GitHub under `the 8.10 milestone
973 As usual you can find the full list of PRs on GitHub under `the 8.10 milestone
961 <https://github.com/ipython/ipython/milestone/112?closed=1>`__.
974 <https://github.com/ipython/ipython/milestone/112?closed=1>`__.
962
975
963 In Particular:
976 In Particular:
964
977
965 - bump minimum numpy to `>=1.21` version following NEP29. :ghpull:`13930`
978 - bump minimum numpy to `>=1.21` version following NEP29. :ghpull:`13930`
966 - fix for compatibility with MyPy 1.0. :ghpull:`13933`
979 - fix for compatibility with MyPy 1.0. :ghpull:`13933`
967 - fix nbgrader stalling when IPython's ``showtraceback`` function is
980 - fix nbgrader stalling when IPython's ``showtraceback`` function is
968 monkeypatched. :ghpull:`13934`
981 monkeypatched. :ghpull:`13934`
969
982
970
983
971
984
972 As this release also contains those minimal changes in addition to fixing the
985 As this release also contains those minimal changes in addition to fixing the
973 CVE I decided to bump the minor version anyway.
986 CVE I decided to bump the minor version anyway.
974
987
975 This will not affect the normal release schedule, so IPython 8.11 is due in
988 This will not affect the normal release schedule, so IPython 8.11 is due in
976 about 2 weeks.
989 about 2 weeks.
977
990
978 .. _version 8.9.0:
991 .. _version 8.9.0:
979
992
980 IPython 8.9.0
993 IPython 8.9.0
981 -------------
994 -------------
982
995
983 Second release of IPython in 2023, last Friday of the month, we are back on
996 Second release of IPython in 2023, last Friday of the month, we are back on
984 track. This is a small release with a few bug-fixes, and improvements, mostly
997 track. This is a small release with a few bug-fixes, and improvements, mostly
985 with respect to terminal shortcuts.
998 with respect to terminal shortcuts.
986
999
987
1000
988 The biggest improvement for 8.9 is a drastic amelioration of the
1001 The biggest improvement for 8.9 is a drastic amelioration of the
989 auto-suggestions sponsored by D.E. Shaw and implemented by the more and more
1002 auto-suggestions sponsored by D.E. Shaw and implemented by the more and more
990 active contributor `@krassowski <https://github.com/krassowski>`.
1003 active contributor `@krassowski <https://github.com/krassowski>`.
991
1004
992 - ``right`` accepts a single character from suggestion
1005 - ``right`` accepts a single character from suggestion
993 - ``ctrl+right`` accepts a semantic token (macos default shortcuts take
1006 - ``ctrl+right`` accepts a semantic token (macos default shortcuts take
994 precedence and need to be disabled to make this work)
1007 precedence and need to be disabled to make this work)
995 - ``backspace`` deletes a character and resumes hinting autosuggestions
1008 - ``backspace`` deletes a character and resumes hinting autosuggestions
996 - ``ctrl-left`` accepts suggestion and moves cursor left one character.
1009 - ``ctrl-left`` accepts suggestion and moves cursor left one character.
997 - ``backspace`` deletes a character and resumes hinting autosuggestions
1010 - ``backspace`` deletes a character and resumes hinting autosuggestions
998 - ``down`` moves to suggestion to later in history when no lines are present below the cursors.
1011 - ``down`` moves to suggestion to later in history when no lines are present below the cursors.
999 - ``up`` moves to suggestion from earlier in history when no lines are present above the cursor.
1012 - ``up`` moves to suggestion from earlier in history when no lines are present above the cursor.
1000
1013
1001 This is best described by the Gif posted by `@krassowski
1014 This is best described by the Gif posted by `@krassowski
1002 <https://github.com/krassowski>`, and in the PR itself :ghpull:`13888`.
1015 <https://github.com/krassowski>`, and in the PR itself :ghpull:`13888`.
1003
1016
1004 .. image:: ../_images/autosuggest.gif
1017 .. image:: ../_images/autosuggest.gif
1005
1018
1006 Please report any feedback in order for us to improve the user experience.
1019 Please report any feedback in order for us to improve the user experience.
1007 In particular we are also working on making the shortcuts configurable.
1020 In particular we are also working on making the shortcuts configurable.
1008
1021
1009 If you are interested in better terminal shortcuts, I also invite you to
1022 If you are interested in better terminal shortcuts, I also invite you to
1010 participate in issue `13879
1023 participate in issue `13879
1011 <https://github.com/ipython/ipython/issues/13879>`__.
1024 <https://github.com/ipython/ipython/issues/13879>`__.
1012
1025
1013
1026
1014 As we follow `NEP29
1027 As we follow `NEP29
1015 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`__, next version of
1028 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`__, next version of
1016 IPython will officially stop supporting numpy 1.20, and will stop supporting
1029 IPython will officially stop supporting numpy 1.20, and will stop supporting
1017 Python 3.8 after April release.
1030 Python 3.8 after April release.
1018
1031
1019 As usual you can find the full list of PRs on GitHub under `the 8.9 milestone
1032 As usual you can find the full list of PRs on GitHub under `the 8.9 milestone
1020 <https://github.com/ipython/ipython/milestone/111?closed=1>`__.
1033 <https://github.com/ipython/ipython/milestone/111?closed=1>`__.
1021
1034
1022
1035
1023 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1036 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1024 work on IPython and related libraries.
1037 work on IPython and related libraries.
1025
1038
1026 .. _version 8.8.0:
1039 .. _version 8.8.0:
1027
1040
1028 IPython 8.8.0
1041 IPython 8.8.0
1029 -------------
1042 -------------
1030
1043
1031 First release of IPython in 2023 as there was no release at the end of
1044 First release of IPython in 2023 as there was no release at the end of
1032 December.
1045 December.
1033
1046
1034 This is an unusually big release (relatively speaking) with more than 15 Pull
1047 This is an unusually big release (relatively speaking) with more than 15 Pull
1035 Requests merged.
1048 Requests merged.
1036
1049
1037 Of particular interest are:
1050 Of particular interest are:
1038
1051
1039 - :ghpull:`13852` that replaces the greedy completer and improves
1052 - :ghpull:`13852` that replaces the greedy completer and improves
1040 completion, in particular for dictionary keys.
1053 completion, in particular for dictionary keys.
1041 - :ghpull:`13858` that adds ``py.typed`` to ``setup.cfg`` to make sure it is
1054 - :ghpull:`13858` that adds ``py.typed`` to ``setup.cfg`` to make sure it is
1042 bundled in wheels.
1055 bundled in wheels.
1043 - :ghpull:`13869` that implements tab completions for IPython options in the
1056 - :ghpull:`13869` that implements tab completions for IPython options in the
1044 shell when using `argcomplete <https://github.com/kislyuk/argcomplete>`. I
1057 shell when using `argcomplete <https://github.com/kislyuk/argcomplete>`. I
1045 believe this also needs a recent version of Traitlets.
1058 believe this also needs a recent version of Traitlets.
1046 - :ghpull:`13865` makes the ``inspector`` class of `InteractiveShell`
1059 - :ghpull:`13865` makes the ``inspector`` class of `InteractiveShell`
1047 configurable.
1060 configurable.
1048 - :ghpull:`13880` that removes minor-version entrypoints as the minor version
1061 - :ghpull:`13880` that removes minor-version entrypoints as the minor version
1049 entry points that would be included in the wheel would be the one of the
1062 entry points that would be included in the wheel would be the one of the
1050 Python version that was used to build the ``whl`` file.
1063 Python version that was used to build the ``whl`` file.
1051
1064
1052 In no particular order, the rest of the changes update the test suite to be
1065 In no particular order, the rest of the changes update the test suite to be
1053 compatible with Pygments 2.14, various docfixes, testing on more recent python
1066 compatible with Pygments 2.14, various docfixes, testing on more recent python
1054 versions and various updates.
1067 versions and various updates.
1055
1068
1056 As usual you can find the full list of PRs on GitHub under `the 8.8 milestone
1069 As usual you can find the full list of PRs on GitHub under `the 8.8 milestone
1057 <https://github.com/ipython/ipython/milestone/110>`__.
1070 <https://github.com/ipython/ipython/milestone/110>`__.
1058
1071
1059 Many thanks to @krassowski for the many PRs and @jasongrout for reviewing and
1072 Many thanks to @krassowski for the many PRs and @jasongrout for reviewing and
1060 merging contributions.
1073 merging contributions.
1061
1074
1062 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1075 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1063 work on IPython and related libraries.
1076 work on IPython and related libraries.
1064
1077
1065 .. _version 8.7.0:
1078 .. _version 8.7.0:
1066
1079
1067 IPython 8.7.0
1080 IPython 8.7.0
1068 -------------
1081 -------------
1069
1082
1070
1083
1071 Small release of IPython with a couple of bug fixes and new features for this
1084 Small release of IPython with a couple of bug fixes and new features for this
1072 month. Next month is the end of year, it is unclear if there will be a release
1085 month. Next month is the end of year, it is unclear if there will be a release
1073 close to the new year's eve, or if the next release will be at the end of January.
1086 close to the new year's eve, or if the next release will be at the end of January.
1074
1087
1075 Here are a few of the relevant fixes,
1088 Here are a few of the relevant fixes,
1076 as usual you can find the full list of PRs on GitHub under `the 8.7 milestone
1089 as usual you can find the full list of PRs on GitHub under `the 8.7 milestone
1077 <https://github.com/ipython/ipython/pulls?q=milestone%3A8.7>`__.
1090 <https://github.com/ipython/ipython/pulls?q=milestone%3A8.7>`__.
1078
1091
1079
1092
1080 - :ghpull:`13834` bump the minimum prompt toolkit to 3.0.11.
1093 - :ghpull:`13834` bump the minimum prompt toolkit to 3.0.11.
1081 - IPython shipped with the ``py.typed`` marker now, and we are progressively
1094 - IPython shipped with the ``py.typed`` marker now, and we are progressively
1082 adding more types. :ghpull:`13831`
1095 adding more types. :ghpull:`13831`
1083 - :ghpull:`13817` add configuration of code blacks formatting.
1096 - :ghpull:`13817` add configuration of code blacks formatting.
1084
1097
1085
1098
1086 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1099 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1087 work on IPython and related libraries.
1100 work on IPython and related libraries.
1088
1101
1089
1102
1090 .. _version 8.6.0:
1103 .. _version 8.6.0:
1091
1104
1092 IPython 8.6.0
1105 IPython 8.6.0
1093 -------------
1106 -------------
1094
1107
1095 Back to a more regular release schedule (at least I try), as Friday is
1108 Back to a more regular release schedule (at least I try), as Friday is
1096 already over by more than 24h hours. This is a slightly bigger release with a
1109 already over by more than 24h hours. This is a slightly bigger release with a
1097 few new features that contain no less than 25 PRs.
1110 few new features that contain no less than 25 PRs.
1098
1111
1099 We'll notably found a couple of non negligible changes:
1112 We'll notably found a couple of non negligible changes:
1100
1113
1101 The ``install_ext`` and related functions have been removed after being
1114 The ``install_ext`` and related functions have been removed after being
1102 deprecated for years. You can use pip to install extensions. ``pip`` did not
1115 deprecated for years. You can use pip to install extensions. ``pip`` did not
1103 exist when ``install_ext`` was introduced. You can still load local extensions
1116 exist when ``install_ext`` was introduced. You can still load local extensions
1104 without installing them. Just set your ``sys.path`` for example. :ghpull:`13744`
1117 without installing them. Just set your ``sys.path`` for example. :ghpull:`13744`
1105
1118
1106 IPython now has extra entry points that use the major *and minor* version of
1119 IPython now has extra entry points that use the major *and minor* version of
1107 python. For some of you this means that you can do a quick ``ipython3.10`` to
1120 python. For some of you this means that you can do a quick ``ipython3.10`` to
1108 launch IPython from the Python 3.10 interpreter, while still using Python 3.11
1121 launch IPython from the Python 3.10 interpreter, while still using Python 3.11
1109 as your main Python. :ghpull:`13743`
1122 as your main Python. :ghpull:`13743`
1110
1123
1111 The completer matcher API has been improved. See :ghpull:`13745`. This should
1124 The completer matcher API has been improved. See :ghpull:`13745`. This should
1112 improve the type inference and improve dict keys completions in many use case.
1125 improve the type inference and improve dict keys completions in many use case.
1113 Thanks ``@krassowski`` for all the work, and the D.E. Shaw group for sponsoring
1126 Thanks ``@krassowski`` for all the work, and the D.E. Shaw group for sponsoring
1114 it.
1127 it.
1115
1128
1116 The color of error nodes in tracebacks can now be customized. See
1129 The color of error nodes in tracebacks can now be customized. See
1117 :ghpull:`13756`. This is a private attribute until someone finds the time to
1130 :ghpull:`13756`. This is a private attribute until someone finds the time to
1118 properly add a configuration option. Note that with Python 3.11 that also shows
1131 properly add a configuration option. Note that with Python 3.11 that also shows
1119 the relevant nodes in traceback, it would be good to leverage this information
1132 the relevant nodes in traceback, it would be good to leverage this information
1120 (plus the "did you mean" info added on attribute errors). But that's likely work
1133 (plus the "did you mean" info added on attribute errors). But that's likely work
1121 I won't have time to do before long, so contributions welcome.
1134 I won't have time to do before long, so contributions welcome.
1122
1135
1123 As we follow NEP 29, we removed support for numpy 1.19 :ghpull:`13760`.
1136 As we follow NEP 29, we removed support for numpy 1.19 :ghpull:`13760`.
1124
1137
1125
1138
1126 The ``open()`` function present in the user namespace by default will now refuse
1139 The ``open()`` function present in the user namespace by default will now refuse
1127 to open the file descriptors 0,1,2 (stdin, out, err), to avoid crashing IPython.
1140 to open the file descriptors 0,1,2 (stdin, out, err), to avoid crashing IPython.
1128 This mostly occurs in teaching context when incorrect values get passed around.
1141 This mostly occurs in teaching context when incorrect values get passed around.
1129
1142
1130
1143
1131 The ``?``, ``??``, and corresponding ``pinfo``, ``pinfo2`` magics can now find
1144 The ``?``, ``??``, and corresponding ``pinfo``, ``pinfo2`` magics can now find
1132 objects inside arrays. That is to say, the following now works::
1145 objects inside arrays. That is to say, the following now works::
1133
1146
1134
1147
1135 >>> def my_func(*arg, **kwargs):pass
1148 >>> def my_func(*arg, **kwargs):pass
1136 >>> container = [my_func]
1149 >>> container = [my_func]
1137 >>> container[0]?
1150 >>> container[0]?
1138
1151
1139
1152
1140 If ``container`` define a custom ``getitem``, this __will__ trigger the custom
1153 If ``container`` define a custom ``getitem``, this __will__ trigger the custom
1141 method. So don't put side effects in your ``getitems``. Thanks to the D.E. Shaw
1154 method. So don't put side effects in your ``getitems``. Thanks to the D.E. Shaw
1142 group for the request and sponsoring the work.
1155 group for the request and sponsoring the work.
1143
1156
1144
1157
1145 As usual you can find the full list of PRs on GitHub under `the 8.6 milestone
1158 As usual you can find the full list of PRs on GitHub under `the 8.6 milestone
1146 <https://github.com/ipython/ipython/pulls?q=milestone%3A8.6>`__.
1159 <https://github.com/ipython/ipython/pulls?q=milestone%3A8.6>`__.
1147
1160
1148 Thanks to all hacktoberfest contributors, please contribute to
1161 Thanks to all hacktoberfest contributors, please contribute to
1149 `closember.org <https://closember.org/>`__.
1162 `closember.org <https://closember.org/>`__.
1150
1163
1151 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1164 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1152 work on IPython and related libraries.
1165 work on IPython and related libraries.
1153
1166
1154 .. _version 8.5.0:
1167 .. _version 8.5.0:
1155
1168
1156 IPython 8.5.0
1169 IPython 8.5.0
1157 -------------
1170 -------------
1158
1171
1159 First release since a couple of month due to various reasons and timing preventing
1172 First release since a couple of month due to various reasons and timing preventing
1160 me for sticking to the usual monthly release the last Friday of each month. This
1173 me for sticking to the usual monthly release the last Friday of each month. This
1161 is of non negligible size as it has more than two dozen PRs with various fixes
1174 is of non negligible size as it has more than two dozen PRs with various fixes
1162 an bug fixes.
1175 an bug fixes.
1163
1176
1164 Many thanks to everybody who contributed PRs for your patience in review and
1177 Many thanks to everybody who contributed PRs for your patience in review and
1165 merges.
1178 merges.
1166
1179
1167 Here is a non-exhaustive list of changes that have been implemented for IPython
1180 Here is a non-exhaustive list of changes that have been implemented for IPython
1168 8.5.0. As usual you can find the full list of issues and PRs tagged with `the
1181 8.5.0. As usual you can find the full list of issues and PRs tagged with `the
1169 8.5 milestone
1182 8.5 milestone
1170 <https://github.com/ipython/ipython/pulls?q=is%3Aclosed+milestone%3A8.5+>`__.
1183 <https://github.com/ipython/ipython/pulls?q=is%3Aclosed+milestone%3A8.5+>`__.
1171
1184
1172 - Added a shortcut for accepting auto suggestion. The End key shortcut for
1185 - Added a shortcut for accepting auto suggestion. The End key shortcut for
1173 accepting auto-suggestion This binding works in Vi mode too, provided
1186 accepting auto-suggestion This binding works in Vi mode too, provided
1174 ``TerminalInteractiveShell.emacs_bindings_in_vi_insert_mode`` is set to be
1187 ``TerminalInteractiveShell.emacs_bindings_in_vi_insert_mode`` is set to be
1175 ``True`` :ghpull:`13566`.
1188 ``True`` :ghpull:`13566`.
1176
1189
1177 - No popup in window for latex generation when generating latex (e.g. via
1190 - No popup in window for latex generation when generating latex (e.g. via
1178 `_latex_repr_`) no popup window is shows under Windows. :ghpull:`13679`
1191 `_latex_repr_`) no popup window is shows under Windows. :ghpull:`13679`
1179
1192
1180 - Fixed error raised when attempting to tab-complete an input string with
1193 - Fixed error raised when attempting to tab-complete an input string with
1181 consecutive periods or forward slashes (such as "file:///var/log/...").
1194 consecutive periods or forward slashes (such as "file:///var/log/...").
1182 :ghpull:`13675`
1195 :ghpull:`13675`
1183
1196
1184 - Relative filenames in Latex rendering :
1197 - Relative filenames in Latex rendering :
1185 The `latex_to_png_dvipng` command internally generates input and output file
1198 The `latex_to_png_dvipng` command internally generates input and output file
1186 arguments to `latex` and `dvipis`. These arguments are now generated as
1199 arguments to `latex` and `dvipis`. These arguments are now generated as
1187 relative files to the current working directory instead of absolute file
1200 relative files to the current working directory instead of absolute file
1188 paths. This solves a problem where the current working directory contains
1201 paths. This solves a problem where the current working directory contains
1189 characters that are not handled properly by `latex` and `dvips`. There are
1202 characters that are not handled properly by `latex` and `dvips`. There are
1190 no changes to the user API. :ghpull:`13680`
1203 no changes to the user API. :ghpull:`13680`
1191
1204
1192 - Stripping decorators bug: Fixed bug which meant that ipython code blocks in
1205 - Stripping decorators bug: Fixed bug which meant that ipython code blocks in
1193 restructured text documents executed with the ipython-sphinx extension
1206 restructured text documents executed with the ipython-sphinx extension
1194 skipped any lines of code containing python decorators. :ghpull:`13612`
1207 skipped any lines of code containing python decorators. :ghpull:`13612`
1195
1208
1196 - Allow some modules with frozen dataclasses to be reloaded. :ghpull:`13732`
1209 - Allow some modules with frozen dataclasses to be reloaded. :ghpull:`13732`
1197 - Fix paste magic on wayland. :ghpull:`13671`
1210 - Fix paste magic on wayland. :ghpull:`13671`
1198 - show maxlen in deque's repr. :ghpull:`13648`
1211 - show maxlen in deque's repr. :ghpull:`13648`
1199
1212
1200 Restore line numbers for Input
1213 Restore line numbers for Input
1201 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1214 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1202
1215
1203 Line number information in tracebacks from input are restored.
1216 Line number information in tracebacks from input are restored.
1204 Line numbers from input were removed during the transition to v8 enhanced traceback reporting.
1217 Line numbers from input were removed during the transition to v8 enhanced traceback reporting.
1205
1218
1206 So, instead of::
1219 So, instead of::
1207
1220
1208 ---------------------------------------------------------------------------
1221 ---------------------------------------------------------------------------
1209 ZeroDivisionError Traceback (most recent call last)
1222 ZeroDivisionError Traceback (most recent call last)
1210 Input In [3], in <cell line: 1>()
1223 Input In [3], in <cell line: 1>()
1211 ----> 1 myfunc(2)
1224 ----> 1 myfunc(2)
1212
1225
1213 Input In [2], in myfunc(z)
1226 Input In [2], in myfunc(z)
1214 1 def myfunc(z):
1227 1 def myfunc(z):
1215 ----> 2 foo.boo(z-1)
1228 ----> 2 foo.boo(z-1)
1216
1229
1217 File ~/code/python/ipython/foo.py:3, in boo(x)
1230 File ~/code/python/ipython/foo.py:3, in boo(x)
1218 2 def boo(x):
1231 2 def boo(x):
1219 ----> 3 return 1/(1-x)
1232 ----> 3 return 1/(1-x)
1220
1233
1221 ZeroDivisionError: division by zero
1234 ZeroDivisionError: division by zero
1222
1235
1223 The error traceback now looks like::
1236 The error traceback now looks like::
1224
1237
1225 ---------------------------------------------------------------------------
1238 ---------------------------------------------------------------------------
1226 ZeroDivisionError Traceback (most recent call last)
1239 ZeroDivisionError Traceback (most recent call last)
1227 Cell In [3], line 1
1240 Cell In [3], line 1
1228 ----> 1 myfunc(2)
1241 ----> 1 myfunc(2)
1229
1242
1230 Cell In [2], line 2, in myfunc(z)
1243 Cell In [2], line 2, in myfunc(z)
1231 1 def myfunc(z):
1244 1 def myfunc(z):
1232 ----> 2 foo.boo(z-1)
1245 ----> 2 foo.boo(z-1)
1233
1246
1234 File ~/code/python/ipython/foo.py:3, in boo(x)
1247 File ~/code/python/ipython/foo.py:3, in boo(x)
1235 2 def boo(x):
1248 2 def boo(x):
1236 ----> 3 return 1/(1-x)
1249 ----> 3 return 1/(1-x)
1237
1250
1238 ZeroDivisionError: division by zero
1251 ZeroDivisionError: division by zero
1239
1252
1240 or, with xmode=Plain::
1253 or, with xmode=Plain::
1241
1254
1242 Traceback (most recent call last):
1255 Traceback (most recent call last):
1243 Cell In [12], line 1
1256 Cell In [12], line 1
1244 myfunc(2)
1257 myfunc(2)
1245 Cell In [6], line 2 in myfunc
1258 Cell In [6], line 2 in myfunc
1246 foo.boo(z-1)
1259 foo.boo(z-1)
1247 File ~/code/python/ipython/foo.py:3 in boo
1260 File ~/code/python/ipython/foo.py:3 in boo
1248 return 1/(1-x)
1261 return 1/(1-x)
1249 ZeroDivisionError: division by zero
1262 ZeroDivisionError: division by zero
1250
1263
1251 :ghpull:`13560`
1264 :ghpull:`13560`
1252
1265
1253 New setting to silence warning if working inside a virtual environment
1266 New setting to silence warning if working inside a virtual environment
1254 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1267 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1255
1268
1256 Previously, when starting IPython in a virtual environment without IPython installed (so IPython from the global environment is used), the following warning was printed:
1269 Previously, when starting IPython in a virtual environment without IPython installed (so IPython from the global environment is used), the following warning was printed:
1257
1270
1258 Attempting to work in a virtualenv. If you encounter problems, please install IPython inside the virtualenv.
1271 Attempting to work in a virtualenv. If you encounter problems, please install IPython inside the virtualenv.
1259
1272
1260 This warning can be permanently silenced by setting ``c.InteractiveShell.warn_venv`` to ``False`` (the default is ``True``).
1273 This warning can be permanently silenced by setting ``c.InteractiveShell.warn_venv`` to ``False`` (the default is ``True``).
1261
1274
1262 :ghpull:`13706`
1275 :ghpull:`13706`
1263
1276
1264 -------
1277 -------
1265
1278
1266 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1279 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1267 work on IPython and related libraries.
1280 work on IPython and related libraries.
1268
1281
1269
1282
1270 .. _version 8.4.0:
1283 .. _version 8.4.0:
1271
1284
1272 IPython 8.4.0
1285 IPython 8.4.0
1273 -------------
1286 -------------
1274
1287
1275 As for 7.34, this version contains a single fix: fix uncaught BdbQuit exceptions on ipdb
1288 As for 7.34, this version contains a single fix: fix uncaught BdbQuit exceptions on ipdb
1276 exit :ghpull:`13668`, and a single typo fix in documentation: :ghpull:`13682`
1289 exit :ghpull:`13668`, and a single typo fix in documentation: :ghpull:`13682`
1277
1290
1278 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1291 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1279 work on IPython and related libraries.
1292 work on IPython and related libraries.
1280
1293
1281
1294
1282 .. _version 8.3.0:
1295 .. _version 8.3.0:
1283
1296
1284 IPython 8.3.0
1297 IPython 8.3.0
1285 -------------
1298 -------------
1286
1299
1287 - :ghpull:`13625`, using ``?``, ``??``, ``*?`` will not call
1300 - :ghpull:`13625`, using ``?``, ``??``, ``*?`` will not call
1288 ``set_next_input`` as most frontend allow proper multiline editing and it was
1301 ``set_next_input`` as most frontend allow proper multiline editing and it was
1289 causing issues for many users of multi-cell frontends. This has been backported to 7.33
1302 causing issues for many users of multi-cell frontends. This has been backported to 7.33
1290
1303
1291
1304
1292 - :ghpull:`13600`, ``pre_run_*``-hooks will now have a ``cell_id`` attribute on
1305 - :ghpull:`13600`, ``pre_run_*``-hooks will now have a ``cell_id`` attribute on
1293 the info object when frontend provides it. This has been backported to 7.33
1306 the info object when frontend provides it. This has been backported to 7.33
1294
1307
1295 - :ghpull:`13624`, fixed :kbd:`End` key being broken after accepting an
1308 - :ghpull:`13624`, fixed :kbd:`End` key being broken after accepting an
1296 auto-suggestion.
1309 auto-suggestion.
1297
1310
1298 - :ghpull:`13657` fixed an issue where history from different sessions would be mixed.
1311 - :ghpull:`13657` fixed an issue where history from different sessions would be mixed.
1299
1312
1300 .. _version 8.2.0:
1313 .. _version 8.2.0:
1301
1314
1302 IPython 8.2.0
1315 IPython 8.2.0
1303 -------------
1316 -------------
1304
1317
1305 IPython 8.2 mostly bring bugfixes to IPython.
1318 IPython 8.2 mostly bring bugfixes to IPython.
1306
1319
1307 - Auto-suggestion can now be elected with the ``end`` key. :ghpull:`13566`
1320 - Auto-suggestion can now be elected with the ``end`` key. :ghpull:`13566`
1308 - Some traceback issues with ``assert etb is not None`` have been fixed. :ghpull:`13588`
1321 - Some traceback issues with ``assert etb is not None`` have been fixed. :ghpull:`13588`
1309 - History is now pulled from the sqitel database and not from in-memory.
1322 - History is now pulled from the sqitel database and not from in-memory.
1310 In particular when using the ``%paste`` magic, the content of the pasted text will
1323 In particular when using the ``%paste`` magic, the content of the pasted text will
1311 be part of the history and not the verbatim text ``%paste`` anymore. :ghpull:`13592`
1324 be part of the history and not the verbatim text ``%paste`` anymore. :ghpull:`13592`
1312 - Fix ``Ctrl-\\`` exit cleanup :ghpull:`13603`
1325 - Fix ``Ctrl-\\`` exit cleanup :ghpull:`13603`
1313 - Fixes to ``ultratb`` ipdb support when used outside of IPython. :ghpull:`13498`
1326 - Fixes to ``ultratb`` ipdb support when used outside of IPython. :ghpull:`13498`
1314
1327
1315
1328
1316 I am still trying to fix and investigate :ghissue:`13598`, which seems to be
1329 I am still trying to fix and investigate :ghissue:`13598`, which seems to be
1317 random, and would appreciate help if you find a reproducible minimal case. I've
1330 random, and would appreciate help if you find a reproducible minimal case. I've
1318 tried to make various changes to the codebase to mitigate it, but a proper fix
1331 tried to make various changes to the codebase to mitigate it, but a proper fix
1319 will be difficult without understanding the cause.
1332 will be difficult without understanding the cause.
1320
1333
1321
1334
1322 All the issues on pull-requests for this release can be found in the `8.2
1335 All the issues on pull-requests for this release can be found in the `8.2
1323 milestone. <https://github.com/ipython/ipython/milestone/100>`__ . And some
1336 milestone. <https://github.com/ipython/ipython/milestone/100>`__ . And some
1324 documentation only PR can be found as part of the `7.33 milestone
1337 documentation only PR can be found as part of the `7.33 milestone
1325 <https://github.com/ipython/ipython/milestone/101>`__ (currently not released).
1338 <https://github.com/ipython/ipython/milestone/101>`__ (currently not released).
1326
1339
1327 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1340 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1328 work on IPython and related libraries.
1341 work on IPython and related libraries.
1329
1342
1330 .. _version 8.1.1:
1343 .. _version 8.1.1:
1331
1344
1332 IPython 8.1.1
1345 IPython 8.1.1
1333 -------------
1346 -------------
1334
1347
1335 Fix an issue with virtualenv and Python 3.8 introduced in 8.1
1348 Fix an issue with virtualenv and Python 3.8 introduced in 8.1
1336
1349
1337 Revert :ghpull:`13537` (fix an issue with symlinks in virtualenv) that raises an
1350 Revert :ghpull:`13537` (fix an issue with symlinks in virtualenv) that raises an
1338 error in Python 3.8, and fixed in a different way in :ghpull:`13559`.
1351 error in Python 3.8, and fixed in a different way in :ghpull:`13559`.
1339
1352
1340 .. _version 8.1:
1353 .. _version 8.1:
1341
1354
1342 IPython 8.1.0
1355 IPython 8.1.0
1343 -------------
1356 -------------
1344
1357
1345 IPython 8.1 is the first minor release after 8.0 and fixes a number of bugs and
1358 IPython 8.1 is the first minor release after 8.0 and fixes a number of bugs and
1346 updates a few behaviors that were problematic with the 8.0 as with many new major
1359 updates a few behaviors that were problematic with the 8.0 as with many new major
1347 release.
1360 release.
1348
1361
1349 Note that beyond the changes listed here, IPython 8.1.0 also contains all the
1362 Note that beyond the changes listed here, IPython 8.1.0 also contains all the
1350 features listed in :ref:`version 7.32`.
1363 features listed in :ref:`version 7.32`.
1351
1364
1352 - Misc and multiple fixes around quotation auto-closing. It is now disabled by
1365 - Misc and multiple fixes around quotation auto-closing. It is now disabled by
1353 default. Run with ``TerminalInteractiveShell.auto_match=True`` to re-enabled
1366 default. Run with ``TerminalInteractiveShell.auto_match=True`` to re-enabled
1354 - Require pygments>=2.4.0 :ghpull:`13459`, this was implicit in the code, but
1367 - Require pygments>=2.4.0 :ghpull:`13459`, this was implicit in the code, but
1355 is now explicit in ``setup.cfg``/``setup.py``
1368 is now explicit in ``setup.cfg``/``setup.py``
1356 - Docs improvement of ``core.magic_arguments`` examples. :ghpull:`13433`
1369 - Docs improvement of ``core.magic_arguments`` examples. :ghpull:`13433`
1357 - Multi-line edit executes too early with await. :ghpull:`13424`
1370 - Multi-line edit executes too early with await. :ghpull:`13424`
1358
1371
1359 - ``black`` is back as an optional dependency, and autoformatting disabled by
1372 - ``black`` is back as an optional dependency, and autoformatting disabled by
1360 default until some fixes are implemented (black improperly reformat magics).
1373 default until some fixes are implemented (black improperly reformat magics).
1361 :ghpull:`13471` Additionally the ability to use ``yapf`` as a code
1374 :ghpull:`13471` Additionally the ability to use ``yapf`` as a code
1362 reformatter has been added :ghpull:`13528` . You can use
1375 reformatter has been added :ghpull:`13528` . You can use
1363 ``TerminalInteractiveShell.autoformatter="black"``,
1376 ``TerminalInteractiveShell.autoformatter="black"``,
1364 ``TerminalInteractiveShell.autoformatter="yapf"`` to re-enable auto formatting
1377 ``TerminalInteractiveShell.autoformatter="yapf"`` to re-enable auto formatting
1365 with black, or switch to yapf.
1378 with black, or switch to yapf.
1366
1379
1367 - Fix and issue where ``display`` was not defined.
1380 - Fix and issue where ``display`` was not defined.
1368
1381
1369 - Auto suggestions are now configurable. Currently only
1382 - Auto suggestions are now configurable. Currently only
1370 ``AutoSuggestFromHistory`` (default) and ``None``. new provider contribution
1383 ``AutoSuggestFromHistory`` (default) and ``None``. new provider contribution
1371 welcomed. :ghpull:`13475`
1384 welcomed. :ghpull:`13475`
1372
1385
1373 - multiple packaging/testing improvement to simplify downstream packaging
1386 - multiple packaging/testing improvement to simplify downstream packaging
1374 (xfail with reasons, try to not access network...).
1387 (xfail with reasons, try to not access network...).
1375
1388
1376 - Update deprecation. ``InteractiveShell.magic`` internal method has been
1389 - Update deprecation. ``InteractiveShell.magic`` internal method has been
1377 deprecated for many years but did not emit a warning until now.
1390 deprecated for many years but did not emit a warning until now.
1378
1391
1379 - internal ``appended_to_syspath`` context manager has been deprecated.
1392 - internal ``appended_to_syspath`` context manager has been deprecated.
1380
1393
1381 - fix an issue with symlinks in virtualenv :ghpull:`13537` (Reverted in 8.1.1)
1394 - fix an issue with symlinks in virtualenv :ghpull:`13537` (Reverted in 8.1.1)
1382
1395
1383 - Fix an issue with vim mode, where cursor would not be reset on exit :ghpull:`13472`
1396 - Fix an issue with vim mode, where cursor would not be reset on exit :ghpull:`13472`
1384
1397
1385 - ipython directive now remove only known pseudo-decorators :ghpull:`13532`
1398 - ipython directive now remove only known pseudo-decorators :ghpull:`13532`
1386
1399
1387 - ``IPython/lib/security`` which used to be used for jupyter notebook has been
1400 - ``IPython/lib/security`` which used to be used for jupyter notebook has been
1388 removed.
1401 removed.
1389
1402
1390 - Fix an issue where ``async with`` would execute on new lines. :ghpull:`13436`
1403 - Fix an issue where ``async with`` would execute on new lines. :ghpull:`13436`
1391
1404
1392
1405
1393 We want to remind users that IPython is part of the Jupyter organisations, and
1406 We want to remind users that IPython is part of the Jupyter organisations, and
1394 thus governed by a Code of Conduct. Some of the behavior we have seen on GitHub is not acceptable.
1407 thus governed by a Code of Conduct. Some of the behavior we have seen on GitHub is not acceptable.
1395 Abuse and non-respectful comments on discussion will not be tolerated.
1408 Abuse and non-respectful comments on discussion will not be tolerated.
1396
1409
1397 Many thanks to all the contributors to this release, many of the above fixed issues and
1410 Many thanks to all the contributors to this release, many of the above fixed issues and
1398 new features were done by first time contributors, showing there is still
1411 new features were done by first time contributors, showing there is still
1399 plenty of easy contribution possible in IPython
1412 plenty of easy contribution possible in IPython
1400 . You can find all individual contributions
1413 . You can find all individual contributions
1401 to this milestone `on github <https://github.com/ipython/ipython/milestone/91>`__.
1414 to this milestone `on github <https://github.com/ipython/ipython/milestone/91>`__.
1402
1415
1403 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1416 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
1404 work on IPython and related libraries. In particular the Lazy autoloading of
1417 work on IPython and related libraries. In particular the Lazy autoloading of
1405 magics that you will find described in the 7.32 release notes.
1418 magics that you will find described in the 7.32 release notes.
1406
1419
1407
1420
1408 .. _version 8.0.1:
1421 .. _version 8.0.1:
1409
1422
1410 IPython 8.0.1 (CVE-2022-21699)
1423 IPython 8.0.1 (CVE-2022-21699)
1411 ------------------------------
1424 ------------------------------
1412
1425
1413 IPython 8.0.1, 7.31.1 and 5.11 are security releases that change some default
1426 IPython 8.0.1, 7.31.1 and 5.11 are security releases that change some default
1414 values in order to prevent potential Execution with Unnecessary Privileges.
1427 values in order to prevent potential Execution with Unnecessary Privileges.
1415
1428
1416 Almost all version of IPython looks for configuration and profiles in current
1429 Almost all version of IPython looks for configuration and profiles in current
1417 working directory. Since IPython was developed before pip and environments
1430 working directory. Since IPython was developed before pip and environments
1418 existed it was used a convenient way to load code/packages in a project
1431 existed it was used a convenient way to load code/packages in a project
1419 dependant way.
1432 dependant way.
1420
1433
1421 In 2022, it is not necessary anymore, and can lead to confusing behavior where
1434 In 2022, it is not necessary anymore, and can lead to confusing behavior where
1422 for example cloning a repository and starting IPython or loading a notebook from
1435 for example cloning a repository and starting IPython or loading a notebook from
1423 any Jupyter-Compatible interface that has ipython set as a kernel can lead to
1436 any Jupyter-Compatible interface that has ipython set as a kernel can lead to
1424 code execution.
1437 code execution.
1425
1438
1426
1439
1427 I did not find any standard way for packaged to advertise CVEs they fix, I'm
1440 I did not find any standard way for packaged to advertise CVEs they fix, I'm
1428 thus trying to add a ``__patched_cves__`` attribute to the IPython module that
1441 thus trying to add a ``__patched_cves__`` attribute to the IPython module that
1429 list the CVEs that should have been fixed. This attribute is informational only
1442 list the CVEs that should have been fixed. This attribute is informational only
1430 as if a executable has a flaw, this value can always be changed by an attacker.
1443 as if a executable has a flaw, this value can always be changed by an attacker.
1431
1444
1432 .. code::
1445 .. code::
1433
1446
1434 In [1]: import IPython
1447 In [1]: import IPython
1435
1448
1436 In [2]: IPython.__patched_cves__
1449 In [2]: IPython.__patched_cves__
1437 Out[2]: {'CVE-2022-21699'}
1450 Out[2]: {'CVE-2022-21699'}
1438
1451
1439 In [3]: 'CVE-2022-21699' in IPython.__patched_cves__
1452 In [3]: 'CVE-2022-21699' in IPython.__patched_cves__
1440 Out[3]: True
1453 Out[3]: True
1441
1454
1442 Thus starting with this version:
1455 Thus starting with this version:
1443
1456
1444 - The current working directory is not searched anymore for profiles or
1457 - The current working directory is not searched anymore for profiles or
1445 configurations files.
1458 configurations files.
1446 - Added a ``__patched_cves__`` attribute (set of strings) to IPython module that contain
1459 - Added a ``__patched_cves__`` attribute (set of strings) to IPython module that contain
1447 the list of fixed CVE. This is informational only.
1460 the list of fixed CVE. This is informational only.
1448
1461
1449 Further details can be read on the `GitHub Advisory <https://github.com/ipython/ipython/security/advisories/GHSA-pq7m-3gw7-gq5x>`__
1462 Further details can be read on the `GitHub Advisory <https://github.com/ipython/ipython/security/advisories/GHSA-pq7m-3gw7-gq5x>`__
1450
1463
1451
1464
1452 .. _version 8.0:
1465 .. _version 8.0:
1453
1466
1454 IPython 8.0
1467 IPython 8.0
1455 -----------
1468 -----------
1456
1469
1457 IPython 8.0 is bringing a large number of new features and improvements to both the
1470 IPython 8.0 is bringing a large number of new features and improvements to both the
1458 user of the terminal and of the kernel via Jupyter. The removal of compatibility
1471 user of the terminal and of the kernel via Jupyter. The removal of compatibility
1459 with an older version of Python is also the opportunity to do a couple of
1472 with an older version of Python is also the opportunity to do a couple of
1460 performance improvements in particular with respect to startup time.
1473 performance improvements in particular with respect to startup time.
1461 The 8.x branch started diverging from its predecessor around IPython 7.12
1474 The 8.x branch started diverging from its predecessor around IPython 7.12
1462 (January 2020).
1475 (January 2020).
1463
1476
1464 This release contains 250+ pull requests, in addition to many of the features
1477 This release contains 250+ pull requests, in addition to many of the features
1465 and backports that have made it to the 7.x branch. Please see the
1478 and backports that have made it to the 7.x branch. Please see the
1466 `8.0 milestone <https://github.com/ipython/ipython/milestone/73?closed=1>`__ for the full list of pull requests.
1479 `8.0 milestone <https://github.com/ipython/ipython/milestone/73?closed=1>`__ for the full list of pull requests.
1467
1480
1468 Please feel free to send pull requests to update those notes after release,
1481 Please feel free to send pull requests to update those notes after release,
1469 I have likely forgotten a few things reviewing 250+ PRs.
1482 I have likely forgotten a few things reviewing 250+ PRs.
1470
1483
1471 Dependencies changes/downstream packaging
1484 Dependencies changes/downstream packaging
1472 -----------------------------------------
1485 -----------------------------------------
1473
1486
1474 Most of our building steps have been changed to be (mostly) declarative
1487 Most of our building steps have been changed to be (mostly) declarative
1475 and follow PEP 517. We are trying to completely remove ``setup.py`` (:ghpull:`13238`) and are
1488 and follow PEP 517. We are trying to completely remove ``setup.py`` (:ghpull:`13238`) and are
1476 looking for help to do so.
1489 looking for help to do so.
1477
1490
1478 - minimum supported ``traitlets`` version is now 5+
1491 - minimum supported ``traitlets`` version is now 5+
1479 - we now require ``stack_data``
1492 - we now require ``stack_data``
1480 - minimal Python is now 3.8
1493 - minimal Python is now 3.8
1481 - ``nose`` is not a testing requirement anymore
1494 - ``nose`` is not a testing requirement anymore
1482 - ``pytest`` replaces nose.
1495 - ``pytest`` replaces nose.
1483 - ``iptest``/``iptest3`` cli entrypoints do not exist anymore.
1496 - ``iptest``/``iptest3`` cli entrypoints do not exist anymore.
1484 - the minimum officially ​supported ``numpy`` version has been bumped, but this should
1497 - the minimum officially ​supported ``numpy`` version has been bumped, but this should
1485 not have much effect on packaging.
1498 not have much effect on packaging.
1486
1499
1487
1500
1488 Deprecation and removal
1501 Deprecation and removal
1489 -----------------------
1502 -----------------------
1490
1503
1491 We removed almost all features, arguments, functions, and modules that were
1504 We removed almost all features, arguments, functions, and modules that were
1492 marked as deprecated between IPython 1.0 and 5.0. As a reminder, 5.0 was released
1505 marked as deprecated between IPython 1.0 and 5.0. As a reminder, 5.0 was released
1493 in 2016, and 1.0 in 2013. Last release of the 5 branch was 5.10.0, in May 2020.
1506 in 2016, and 1.0 in 2013. Last release of the 5 branch was 5.10.0, in May 2020.
1494 The few remaining deprecated features we left have better deprecation warnings
1507 The few remaining deprecated features we left have better deprecation warnings
1495 or have been turned into explicit errors for better error messages.
1508 or have been turned into explicit errors for better error messages.
1496
1509
1497 I will use this occasion to add the following requests to anyone emitting a
1510 I will use this occasion to add the following requests to anyone emitting a
1498 deprecation warning:
1511 deprecation warning:
1499
1512
1500 - Please add at least ``stacklevel=2`` so that the warning is emitted into the
1513 - Please add at least ``stacklevel=2`` so that the warning is emitted into the
1501 caller context, and not the callee one.
1514 caller context, and not the callee one.
1502 - Please add **since which version** something is deprecated.
1515 - Please add **since which version** something is deprecated.
1503
1516
1504 As a side note, it is much easier to conditionally compare version
1517 As a side note, it is much easier to conditionally compare version
1505 numbers rather than using ``try/except`` when functionality changes with a version.
1518 numbers rather than using ``try/except`` when functionality changes with a version.
1506
1519
1507 I won't list all the removed features here, but modules like ``IPython.kernel``,
1520 I won't list all the removed features here, but modules like ``IPython.kernel``,
1508 which was just a shim module around ``ipykernel`` for the past 8 years, have been
1521 which was just a shim module around ``ipykernel`` for the past 8 years, have been
1509 removed, and so many other similar things that pre-date the name **Jupyter**
1522 removed, and so many other similar things that pre-date the name **Jupyter**
1510 itself.
1523 itself.
1511
1524
1512 We no longer need to add ``IPython.extensions`` to the PYTHONPATH because that is being
1525 We no longer need to add ``IPython.extensions`` to the PYTHONPATH because that is being
1513 handled by ``load_extension``.
1526 handled by ``load_extension``.
1514
1527
1515 We are also removing ``Cythonmagic``, ``sympyprinting`` and ``rmagic`` as they are now in
1528 We are also removing ``Cythonmagic``, ``sympyprinting`` and ``rmagic`` as they are now in
1516 other packages and no longer need to be inside IPython.
1529 other packages and no longer need to be inside IPython.
1517
1530
1518
1531
1519 Documentation
1532 Documentation
1520 -------------
1533 -------------
1521
1534
1522 The majority of our docstrings have now been reformatted and automatically fixed by
1535 The majority of our docstrings have now been reformatted and automatically fixed by
1523 the experimental `VΓ©lin <https://pypi.org/project/velin/>`_ project to conform
1536 the experimental `VΓ©lin <https://pypi.org/project/velin/>`_ project to conform
1524 to numpydoc.
1537 to numpydoc.
1525
1538
1526 Type annotations
1539 Type annotations
1527 ----------------
1540 ----------------
1528
1541
1529 While IPython itself is highly dynamic and can't be completely typed, many of
1542 While IPython itself is highly dynamic and can't be completely typed, many of
1530 the functions now have type annotations, and part of the codebase is now checked
1543 the functions now have type annotations, and part of the codebase is now checked
1531 by mypy.
1544 by mypy.
1532
1545
1533
1546
1534 Featured changes
1547 Featured changes
1535 ----------------
1548 ----------------
1536
1549
1537 Here is a features list of changes in IPython 8.0. This is of course non-exhaustive.
1550 Here is a features list of changes in IPython 8.0. This is of course non-exhaustive.
1538 Please note as well that many features have been added in the 7.x branch as well
1551 Please note as well that many features have been added in the 7.x branch as well
1539 (and hence why you want to read the 7.x what's new notes), in particular
1552 (and hence why you want to read the 7.x what's new notes), in particular
1540 features contributed by QuantStack (with respect to debugger protocol and Xeus
1553 features contributed by QuantStack (with respect to debugger protocol and Xeus
1541 Python), as well as many debugger features that I was pleased to implement as
1554 Python), as well as many debugger features that I was pleased to implement as
1542 part of my work at QuanSight and sponsored by DE Shaw.
1555 part of my work at QuanSight and sponsored by DE Shaw.
1543
1556
1544 Traceback improvements
1557 Traceback improvements
1545 ~~~~~~~~~~~~~~~~~~~~~~
1558 ~~~~~~~~~~~~~~~~~~~~~~
1546
1559
1547 Previously, error tracebacks for errors happening in code cells were showing a
1560 Previously, error tracebacks for errors happening in code cells were showing a
1548 hash, the one used for compiling the Python AST::
1561 hash, the one used for compiling the Python AST::
1549
1562
1550 In [1]: def foo():
1563 In [1]: def foo():
1551 ...: return 3 / 0
1564 ...: return 3 / 0
1552 ...:
1565 ...:
1553
1566
1554 In [2]: foo()
1567 In [2]: foo()
1555 ---------------------------------------------------------------------------
1568 ---------------------------------------------------------------------------
1556 ZeroDivisionError Traceback (most recent call last)
1569 ZeroDivisionError Traceback (most recent call last)
1557 <ipython-input-2-c19b6d9633cf> in <module>
1570 <ipython-input-2-c19b6d9633cf> in <module>
1558 ----> 1 foo()
1571 ----> 1 foo()
1559
1572
1560 <ipython-input-1-1595a74c32d5> in foo()
1573 <ipython-input-1-1595a74c32d5> in foo()
1561 1 def foo():
1574 1 def foo():
1562 ----> 2 return 3 / 0
1575 ----> 2 return 3 / 0
1563 3
1576 3
1564
1577
1565 ZeroDivisionError: division by zero
1578 ZeroDivisionError: division by zero
1566
1579
1567 The error traceback is now correctly formatted, showing the cell number in which the error happened::
1580 The error traceback is now correctly formatted, showing the cell number in which the error happened::
1568
1581
1569 In [1]: def foo():
1582 In [1]: def foo():
1570 ...: return 3 / 0
1583 ...: return 3 / 0
1571 ...:
1584 ...:
1572
1585
1573 Input In [2]: foo()
1586 Input In [2]: foo()
1574 ---------------------------------------------------------------------------
1587 ---------------------------------------------------------------------------
1575 ZeroDivisionError Traceback (most recent call last)
1588 ZeroDivisionError Traceback (most recent call last)
1576 input In [2], in <module>
1589 input In [2], in <module>
1577 ----> 1 foo()
1590 ----> 1 foo()
1578
1591
1579 Input In [1], in foo()
1592 Input In [1], in foo()
1580 1 def foo():
1593 1 def foo():
1581 ----> 2 return 3 / 0
1594 ----> 2 return 3 / 0
1582
1595
1583 ZeroDivisionError: division by zero
1596 ZeroDivisionError: division by zero
1584
1597
1585 The ``stack_data`` package has been integrated, which provides smarter information in the traceback;
1598 The ``stack_data`` package has been integrated, which provides smarter information in the traceback;
1586 in particular it will highlight the AST node where an error occurs which can help to quickly narrow down errors.
1599 in particular it will highlight the AST node where an error occurs which can help to quickly narrow down errors.
1587
1600
1588 For example in the following snippet::
1601 For example in the following snippet::
1589
1602
1590 def foo(i):
1603 def foo(i):
1591 x = [[[0]]]
1604 x = [[[0]]]
1592 return x[0][i][0]
1605 return x[0][i][0]
1593
1606
1594
1607
1595 def bar():
1608 def bar():
1596 return foo(0) + foo(
1609 return foo(0) + foo(
1597 1
1610 1
1598 ) + foo(2)
1611 ) + foo(2)
1599
1612
1600
1613
1601 calling ``bar()`` would raise an ``IndexError`` on the return line of ``foo``,
1614 calling ``bar()`` would raise an ``IndexError`` on the return line of ``foo``,
1602 and IPython 8.0 is capable of telling you where the index error occurs::
1615 and IPython 8.0 is capable of telling you where the index error occurs::
1603
1616
1604
1617
1605 IndexError
1618 IndexError
1606 Input In [2], in <module>
1619 Input In [2], in <module>
1607 ----> 1 bar()
1620 ----> 1 bar()
1608 ^^^^^
1621 ^^^^^
1609
1622
1610 Input In [1], in bar()
1623 Input In [1], in bar()
1611 6 def bar():
1624 6 def bar():
1612 ----> 7 return foo(0) + foo(
1625 ----> 7 return foo(0) + foo(
1613 ^^^^
1626 ^^^^
1614 8 1
1627 8 1
1615 ^^^^^^^^
1628 ^^^^^^^^
1616 9 ) + foo(2)
1629 9 ) + foo(2)
1617 ^^^^
1630 ^^^^
1618
1631
1619 Input In [1], in foo(i)
1632 Input In [1], in foo(i)
1620 1 def foo(i):
1633 1 def foo(i):
1621 2 x = [[[0]]]
1634 2 x = [[[0]]]
1622 ----> 3 return x[0][i][0]
1635 ----> 3 return x[0][i][0]
1623 ^^^^^^^
1636 ^^^^^^^
1624
1637
1625 The corresponding locations marked here with ``^`` will show up highlighted in
1638 The corresponding locations marked here with ``^`` will show up highlighted in
1626 the terminal and notebooks.
1639 the terminal and notebooks.
1627
1640
1628 Finally, a colon ``::`` and line number is appended after a filename in
1641 Finally, a colon ``::`` and line number is appended after a filename in
1629 traceback::
1642 traceback::
1630
1643
1631
1644
1632 ZeroDivisionError Traceback (most recent call last)
1645 ZeroDivisionError Traceback (most recent call last)
1633 File ~/error.py:4, in <module>
1646 File ~/error.py:4, in <module>
1634 1 def f():
1647 1 def f():
1635 2 1/0
1648 2 1/0
1636 ----> 4 f()
1649 ----> 4 f()
1637
1650
1638 File ~/error.py:2, in f()
1651 File ~/error.py:2, in f()
1639 1 def f():
1652 1 def f():
1640 ----> 2 1/0
1653 ----> 2 1/0
1641
1654
1642 Many terminals and editors have integrations enabling you to directly jump to the
1655 Many terminals and editors have integrations enabling you to directly jump to the
1643 relevant file/line when this syntax is used, so this small addition may have a high
1656 relevant file/line when this syntax is used, so this small addition may have a high
1644 impact on productivity.
1657 impact on productivity.
1645
1658
1646
1659
1647 Autosuggestions
1660 Autosuggestions
1648 ~~~~~~~~~~~~~~~
1661 ~~~~~~~~~~~~~~~
1649
1662
1650 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>`__.
1663 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>`__.
1651
1664
1652 `Ptpython <https://github.com/prompt-toolkit/ptpython#ptpython>`__ allows users to enable this feature in
1665 `Ptpython <https://github.com/prompt-toolkit/ptpython#ptpython>`__ allows users to enable this feature in
1653 `ptpython/config.py <https://github.com/prompt-toolkit/ptpython/blob/master/examples/ptpython_config/config.py#L90>`__.
1666 `ptpython/config.py <https://github.com/prompt-toolkit/ptpython/blob/master/examples/ptpython_config/config.py#L90>`__.
1654
1667
1655 This feature allows users to accept autosuggestions with ctrl e, ctrl f,
1668 This feature allows users to accept autosuggestions with ctrl e, ctrl f,
1656 or right arrow as described below.
1669 or right arrow as described below.
1657
1670
1658 1. Start ipython
1671 1. Start ipython
1659
1672
1660 .. image:: ../_images/8.0/auto_suggest_1_prompt_no_text.png
1673 .. image:: ../_images/8.0/auto_suggest_1_prompt_no_text.png
1661
1674
1662 2. Run ``print("hello")``
1675 2. Run ``print("hello")``
1663
1676
1664 .. image:: ../_images/8.0/auto_suggest_2_print_hello_suggest.png
1677 .. image:: ../_images/8.0/auto_suggest_2_print_hello_suggest.png
1665
1678
1666 3. start typing ``print`` again to see the autosuggestion
1679 3. start typing ``print`` again to see the autosuggestion
1667
1680
1668 .. image:: ../_images/8.0/auto_suggest_3_print_hello_suggest.png
1681 .. image:: ../_images/8.0/auto_suggest_3_print_hello_suggest.png
1669
1682
1670 4. Press ``ctrl-f``, or ``ctrl-e``, or ``right-arrow`` to accept the suggestion
1683 4. Press ``ctrl-f``, or ``ctrl-e``, or ``right-arrow`` to accept the suggestion
1671
1684
1672 .. image:: ../_images/8.0/auto_suggest_4_print_hello.png
1685 .. image:: ../_images/8.0/auto_suggest_4_print_hello.png
1673
1686
1674 You can also complete word by word:
1687 You can also complete word by word:
1675
1688
1676 1. Run ``def say_hello(): print("hello")``
1689 1. Run ``def say_hello(): print("hello")``
1677
1690
1678 .. image:: ../_images/8.0/auto_suggest_second_prompt.png
1691 .. image:: ../_images/8.0/auto_suggest_second_prompt.png
1679
1692
1680 2. Start typing the first letter if ``def`` to see the autosuggestion
1693 2. Start typing the first letter if ``def`` to see the autosuggestion
1681
1694
1682 .. image:: ../_images/8.0/auto_suggest_d_phantom.png
1695 .. image:: ../_images/8.0/auto_suggest_d_phantom.png
1683
1696
1684 3. Press ``alt-f`` (or ``escape`` followed by ``f``), to accept the first word of the suggestion
1697 3. Press ``alt-f`` (or ``escape`` followed by ``f``), to accept the first word of the suggestion
1685
1698
1686 .. image:: ../_images/8.0/auto_suggest_def_phantom.png
1699 .. image:: ../_images/8.0/auto_suggest_def_phantom.png
1687
1700
1688 Importantly, this feature does not interfere with tab completion:
1701 Importantly, this feature does not interfere with tab completion:
1689
1702
1690 1. After running ``def say_hello(): print("hello")``, press d
1703 1. After running ``def say_hello(): print("hello")``, press d
1691
1704
1692 .. image:: ../_images/8.0/auto_suggest_d_phantom.png
1705 .. image:: ../_images/8.0/auto_suggest_d_phantom.png
1693
1706
1694 2. Press Tab to start tab completion
1707 2. Press Tab to start tab completion
1695
1708
1696 .. image:: ../_images/8.0/auto_suggest_d_completions.png
1709 .. image:: ../_images/8.0/auto_suggest_d_completions.png
1697
1710
1698 3A. Press Tab again to select the first option
1711 3A. Press Tab again to select the first option
1699
1712
1700 .. image:: ../_images/8.0/auto_suggest_def_completions.png
1713 .. image:: ../_images/8.0/auto_suggest_def_completions.png
1701
1714
1702 3B. Press ``alt f`` (``escape``, ``f``) to accept to accept the first word of the suggestion
1715 3B. Press ``alt f`` (``escape``, ``f``) to accept to accept the first word of the suggestion
1703
1716
1704 .. image:: ../_images/8.0/auto_suggest_def_phantom.png
1717 .. image:: ../_images/8.0/auto_suggest_def_phantom.png
1705
1718
1706 3C. Press ``ctrl-f`` or ``ctrl-e`` to accept the entire suggestion
1719 3C. Press ``ctrl-f`` or ``ctrl-e`` to accept the entire suggestion
1707
1720
1708 .. image:: ../_images/8.0/auto_suggest_match_parens.png
1721 .. image:: ../_images/8.0/auto_suggest_match_parens.png
1709
1722
1710
1723
1711 Currently, autosuggestions are only shown in the emacs or vi insert editing modes:
1724 Currently, autosuggestions are only shown in the emacs or vi insert editing modes:
1712
1725
1713 - The ctrl e, ctrl f, and alt f shortcuts work by default in emacs mode.
1726 - The ctrl e, ctrl f, and alt f shortcuts work by default in emacs mode.
1714 - 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/>`__.
1727 - 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/>`__.
1715
1728
1716
1729
1717 Show pinfo information in ipdb using "?" and "??"
1730 Show pinfo information in ipdb using "?" and "??"
1718 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1731 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1719
1732
1720 In IPDB, it is now possible to show the information about an object using "?"
1733 In IPDB, it is now possible to show the information about an object using "?"
1721 and "??", in much the same way that it can be done when using the IPython prompt::
1734 and "??", in much the same way that it can be done when using the IPython prompt::
1722
1735
1723 ipdb> partial?
1736 ipdb> partial?
1724 Init signature: partial(self, /, *args, **kwargs)
1737 Init signature: partial(self, /, *args, **kwargs)
1725 Docstring:
1738 Docstring:
1726 partial(func, *args, **keywords) - new function with partial application
1739 partial(func, *args, **keywords) - new function with partial application
1727 of the given arguments and keywords.
1740 of the given arguments and keywords.
1728 File: ~/.pyenv/versions/3.8.6/lib/python3.8/functools.py
1741 File: ~/.pyenv/versions/3.8.6/lib/python3.8/functools.py
1729 Type: type
1742 Type: type
1730 Subclasses:
1743 Subclasses:
1731
1744
1732 Previously, ``pinfo`` or ``pinfo2`` command had to be used for this purpose.
1745 Previously, ``pinfo`` or ``pinfo2`` command had to be used for this purpose.
1733
1746
1734
1747
1735 Autoreload 3 feature
1748 Autoreload 3 feature
1736 ~~~~~~~~~~~~~~~~~~~~
1749 ~~~~~~~~~~~~~~~~~~~~
1737
1750
1738 Example: When an IPython session is run with the 'autoreload' extension loaded,
1751 Example: When an IPython session is run with the 'autoreload' extension loaded,
1739 you will now have the option '3' to select, which means the following:
1752 you will now have the option '3' to select, which means the following:
1740
1753
1741 1. replicate all functionality from option 2
1754 1. replicate all functionality from option 2
1742 2. autoload all new funcs/classes/enums/globals from the module when they are added
1755 2. autoload all new funcs/classes/enums/globals from the module when they are added
1743 3. autoload all newly imported funcs/classes/enums/globals from external modules
1756 3. autoload all newly imported funcs/classes/enums/globals from external modules
1744
1757
1745 Try ``%autoreload 3`` in an IPython session after running ``%load_ext autoreload``.
1758 Try ``%autoreload 3`` in an IPython session after running ``%load_ext autoreload``.
1746
1759
1747 For more information please see the following unit test : ``extensions/tests/test_autoreload.py:test_autoload_newly_added_objects``
1760 For more information please see the following unit test : ``extensions/tests/test_autoreload.py:test_autoload_newly_added_objects``
1748
1761
1749 Auto formatting with black in the CLI
1762 Auto formatting with black in the CLI
1750 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1763 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1751
1764
1752 This feature was present in 7.x, but disabled by default.
1765 This feature was present in 7.x, but disabled by default.
1753
1766
1754 In 8.0, input was automatically reformatted with Black when black was installed.
1767 In 8.0, input was automatically reformatted with Black when black was installed.
1755 This feature has been reverted for the time being.
1768 This feature has been reverted for the time being.
1756 You can re-enable it by setting ``TerminalInteractiveShell.autoformatter`` to ``"black"``
1769 You can re-enable it by setting ``TerminalInteractiveShell.autoformatter`` to ``"black"``
1757
1770
1758 History Range Glob feature
1771 History Range Glob feature
1759 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1772 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1760
1773
1761 Previously, when using ``%history``, users could specify either
1774 Previously, when using ``%history``, users could specify either
1762 a range of sessions and lines, for example:
1775 a range of sessions and lines, for example:
1763
1776
1764 .. code-block:: python
1777 .. code-block:: python
1765
1778
1766 ~8/1-~6/5 # see history from the first line of 8 sessions ago,
1779 ~8/1-~6/5 # see history from the first line of 8 sessions ago,
1767 # to the fifth line of 6 sessions ago.``
1780 # to the fifth line of 6 sessions ago.``
1768
1781
1769 Or users could specify a glob pattern:
1782 Or users could specify a glob pattern:
1770
1783
1771 .. code-block:: python
1784 .. code-block:: python
1772
1785
1773 -g <pattern> # glob ALL history for the specified pattern.
1786 -g <pattern> # glob ALL history for the specified pattern.
1774
1787
1775 However users could *not* specify both.
1788 However users could *not* specify both.
1776
1789
1777 If a user *did* specify both a range and a glob pattern,
1790 If a user *did* specify both a range and a glob pattern,
1778 then the glob pattern would be used (globbing *all* history) *and the range would be ignored*.
1791 then the glob pattern would be used (globbing *all* history) *and the range would be ignored*.
1779
1792
1780 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.
1793 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.
1781
1794
1782 Don't start a multi-line cell with sunken parenthesis
1795 Don't start a multi-line cell with sunken parenthesis
1783 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1796 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1784
1797
1785 From now on, IPython will not ask for the next line of input when given a single
1798 From now on, IPython will not ask for the next line of input when given a single
1786 line with more closing than opening brackets. For example, this means that if
1799 line with more closing than opening brackets. For example, this means that if
1787 you (mis)type ``]]`` instead of ``[]``, a ``SyntaxError`` will show up, instead of
1800 you (mis)type ``]]`` instead of ``[]``, a ``SyntaxError`` will show up, instead of
1788 the ``...:`` prompt continuation.
1801 the ``...:`` prompt continuation.
1789
1802
1790 IPython shell for ipdb interact
1803 IPython shell for ipdb interact
1791 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1804 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1792
1805
1793 The ipdb ``interact`` starts an IPython shell instead of Python's built-in ``code.interact()``.
1806 The ipdb ``interact`` starts an IPython shell instead of Python's built-in ``code.interact()``.
1794
1807
1795 Automatic Vi prompt stripping
1808 Automatic Vi prompt stripping
1796 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1809 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1797
1810
1798 When pasting code into IPython, it will strip the leading prompt characters if
1811 When pasting code into IPython, it will strip the leading prompt characters if
1799 there are any. For example, you can paste the following code into the console -
1812 there are any. For example, you can paste the following code into the console -
1800 it will still work, even though each line is prefixed with prompts (``In``,
1813 it will still work, even though each line is prefixed with prompts (``In``,
1801 ``Out``)::
1814 ``Out``)::
1802
1815
1803 In [1]: 2 * 2 == 4
1816 In [1]: 2 * 2 == 4
1804 Out[1]: True
1817 Out[1]: True
1805
1818
1806 In [2]: print("This still works as pasted")
1819 In [2]: print("This still works as pasted")
1807
1820
1808
1821
1809 Previously, this was not the case for the Vi-mode prompts::
1822 Previously, this was not the case for the Vi-mode prompts::
1810
1823
1811 In [1]: [ins] In [13]: 2 * 2 == 4
1824 In [1]: [ins] In [13]: 2 * 2 == 4
1812 ...: Out[13]: True
1825 ...: Out[13]: True
1813 ...:
1826 ...:
1814 File "<ipython-input-1-727bb88eaf33>", line 1
1827 File "<ipython-input-1-727bb88eaf33>", line 1
1815 [ins] In [13]: 2 * 2 == 4
1828 [ins] In [13]: 2 * 2 == 4
1816 ^
1829 ^
1817 SyntaxError: invalid syntax
1830 SyntaxError: invalid syntax
1818
1831
1819 This is now fixed, and Vi prompt prefixes - ``[ins]`` and ``[nav]`` - are
1832 This is now fixed, and Vi prompt prefixes - ``[ins]`` and ``[nav]`` - are
1820 skipped just as the normal ``In`` would be.
1833 skipped just as the normal ``In`` would be.
1821
1834
1822 IPython shell can be started in the Vi mode using ``ipython --TerminalInteractiveShell.editing_mode=vi``,
1835 IPython shell can be started in the Vi mode using ``ipython --TerminalInteractiveShell.editing_mode=vi``,
1823 You should be able to change mode dynamically with ``%config TerminalInteractiveShell.editing_mode='vi'``
1836 You should be able to change mode dynamically with ``%config TerminalInteractiveShell.editing_mode='vi'``
1824
1837
1825 Empty History Ranges
1838 Empty History Ranges
1826 ~~~~~~~~~~~~~~~~~~~~
1839 ~~~~~~~~~~~~~~~~~~~~
1827
1840
1828 A number of magics that take history ranges can now be used with an empty
1841 A number of magics that take history ranges can now be used with an empty
1829 range. These magics are:
1842 range. These magics are:
1830
1843
1831 * ``%save``
1844 * ``%save``
1832 * ``%load``
1845 * ``%load``
1833 * ``%pastebin``
1846 * ``%pastebin``
1834 * ``%pycat``
1847 * ``%pycat``
1835
1848
1836 Using them this way will make them take the history of the current session up
1849 Using them this way will make them take the history of the current session up
1837 to the point of the magic call (such that the magic itself will not be
1850 to the point of the magic call (such that the magic itself will not be
1838 included).
1851 included).
1839
1852
1840 Therefore it is now possible to save the whole history to a file using
1853 Therefore it is now possible to save the whole history to a file using
1841 ``%save <filename>``, load and edit it using ``%load`` (makes for a nice usage
1854 ``%save <filename>``, load and edit it using ``%load`` (makes for a nice usage
1842 when followed with :kbd:`F2`), send it to `dpaste.org <http://dpast.org>`_ using
1855 when followed with :kbd:`F2`), send it to `dpaste.org <http://dpast.org>`_ using
1843 ``%pastebin``, or view the whole thing syntax-highlighted with a single
1856 ``%pastebin``, or view the whole thing syntax-highlighted with a single
1844 ``%pycat``.
1857 ``%pycat``.
1845
1858
1846
1859
1847 Windows timing implementation: Switch to process_time
1860 Windows timing implementation: Switch to process_time
1848 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1861 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1849 Timing on Windows, for example with ``%%time``, was changed from being based on ``time.perf_counter``
1862 Timing on Windows, for example with ``%%time``, was changed from being based on ``time.perf_counter``
1850 (which counted time even when the process was sleeping) to being based on ``time.process_time`` instead
1863 (which counted time even when the process was sleeping) to being based on ``time.process_time`` instead
1851 (which only counts CPU time). This brings it closer to the behavior on Linux. See :ghpull:`12984`.
1864 (which only counts CPU time). This brings it closer to the behavior on Linux. See :ghpull:`12984`.
1852
1865
1853 Miscellaneous
1866 Miscellaneous
1854 ~~~~~~~~~~~~~
1867 ~~~~~~~~~~~~~
1855 - Non-text formatters are not disabled in the terminal, which should simplify
1868 - Non-text formatters are not disabled in the terminal, which should simplify
1856 writing extensions displaying images or other mimetypes in supporting terminals.
1869 writing extensions displaying images or other mimetypes in supporting terminals.
1857 :ghpull:`12315`
1870 :ghpull:`12315`
1858 - It is now possible to automatically insert matching brackets in Terminal IPython using the
1871 - It is now possible to automatically insert matching brackets in Terminal IPython using the
1859 ``TerminalInteractiveShell.auto_match=True`` option. :ghpull:`12586`
1872 ``TerminalInteractiveShell.auto_match=True`` option. :ghpull:`12586`
1860 - We are thinking of deprecating the current ``%%javascript`` magic in favor of a better replacement. See :ghpull:`13376`.
1873 - We are thinking of deprecating the current ``%%javascript`` magic in favor of a better replacement. See :ghpull:`13376`.
1861 - ``~`` is now expanded when part of a path in most magics :ghpull:`13385`
1874 - ``~`` is now expanded when part of a path in most magics :ghpull:`13385`
1862 - ``%/%%timeit`` magic now adds a comma every thousands to make reading a long number easier :ghpull:`13379`
1875 - ``%/%%timeit`` magic now adds a comma every thousands to make reading a long number easier :ghpull:`13379`
1863 - ``"info"`` messages can now be customised to hide some fields :ghpull:`13343`
1876 - ``"info"`` messages can now be customised to hide some fields :ghpull:`13343`
1864 - ``collections.UserList`` now pretty-prints :ghpull:`13320`
1877 - ``collections.UserList`` now pretty-prints :ghpull:`13320`
1865 - The debugger now has a persistent history, which should make it less
1878 - The debugger now has a persistent history, which should make it less
1866 annoying to retype commands :ghpull:`13246`
1879 annoying to retype commands :ghpull:`13246`
1867 - ``!pip`` ``!conda`` ``!cd`` or ``!ls`` are likely doing the wrong thing. We
1880 - ``!pip`` ``!conda`` ``!cd`` or ``!ls`` are likely doing the wrong thing. We
1868 now warn users if they use one of those commands. :ghpull:`12954`
1881 now warn users if they use one of those commands. :ghpull:`12954`
1869 - Make ``%precision`` work for ``numpy.float64`` type :ghpull:`12902`
1882 - Make ``%precision`` work for ``numpy.float64`` type :ghpull:`12902`
1870
1883
1871 Re-added support for XDG config directories
1884 Re-added support for XDG config directories
1872 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1885 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1873
1886
1874 XDG support through the years comes and goes. There is a tension between having
1887 XDG support through the years comes and goes. There is a tension between having
1875 an identical location for configuration in all platforms versus having simple instructions.
1888 an identical location for configuration in all platforms versus having simple instructions.
1876 After initial failures a couple of years ago, IPython was modified to automatically migrate XDG
1889 After initial failures a couple of years ago, IPython was modified to automatically migrate XDG
1877 config files back into ``~/.ipython``. That migration code has now been removed.
1890 config files back into ``~/.ipython``. That migration code has now been removed.
1878 IPython now checks the XDG locations, so if you _manually_ move your config
1891 IPython now checks the XDG locations, so if you _manually_ move your config
1879 files to your preferred location, IPython will not move them back.
1892 files to your preferred location, IPython will not move them back.
1880
1893
1881
1894
1882 Preparing for Python 3.10
1895 Preparing for Python 3.10
1883 -------------------------
1896 -------------------------
1884
1897
1885 To prepare for Python 3.10, we have started working on removing reliance and
1898 To prepare for Python 3.10, we have started working on removing reliance and
1886 any dependency that is not compatible with Python 3.10. This includes migrating our
1899 any dependency that is not compatible with Python 3.10. This includes migrating our
1887 test suite to pytest and starting to remove nose. This also means that the
1900 test suite to pytest and starting to remove nose. This also means that the
1888 ``iptest`` command is now gone and all testing is via pytest.
1901 ``iptest`` command is now gone and all testing is via pytest.
1889
1902
1890 This was in large part thanks to the NumFOCUS Small Developer grant, which enabled us to
1903 This was in large part thanks to the NumFOCUS Small Developer grant, which enabled us to
1891 allocate \$4000 to hire `Nikita Kniazev (@Kojoley) <https://github.com/Kojoley>`_,
1904 allocate \$4000 to hire `Nikita Kniazev (@Kojoley) <https://github.com/Kojoley>`_,
1892 who did a fantastic job at updating our code base, migrating to pytest, pushing
1905 who did a fantastic job at updating our code base, migrating to pytest, pushing
1893 our coverage, and fixing a large number of bugs. I highly recommend contacting
1906 our coverage, and fixing a large number of bugs. I highly recommend contacting
1894 them if you need help with C++ and Python projects.
1907 them if you need help with C++ and Python projects.
1895
1908
1896 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+>`__
1909 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+>`__
1897
1910
1898 Removing support for older Python versions
1911 Removing support for older Python versions
1899 ------------------------------------------
1912 ------------------------------------------
1900
1913
1901
1914
1902 We are removing support for Python up through 3.7, allowing internal code to use the more
1915 We are removing support for Python up through 3.7, allowing internal code to use the more
1903 efficient ``pathlib`` and to make better use of type annotations.
1916 efficient ``pathlib`` and to make better use of type annotations.
1904
1917
1905 .. image:: ../_images/8.0/pathlib_pathlib_everywhere.jpg
1918 .. image:: ../_images/8.0/pathlib_pathlib_everywhere.jpg
1906 :alt: "Meme image of Toy Story with Woody and Buzz, with the text 'pathlib, pathlib everywhere'"
1919 :alt: "Meme image of Toy Story with Woody and Buzz, with the text 'pathlib, pathlib everywhere'"
1907
1920
1908
1921
1909 We had about 34 PRs only to update some logic to update some functions from managing strings to
1922 We had about 34 PRs only to update some logic to update some functions from managing strings to
1910 using Pathlib.
1923 using Pathlib.
1911
1924
1912 The completer has also seen significant updates and now makes use of newer Jedi APIs,
1925 The completer has also seen significant updates and now makes use of newer Jedi APIs,
1913 offering faster and more reliable tab completion.
1926 offering faster and more reliable tab completion.
1914
1927
1915 Misc Statistics
1928 Misc Statistics
1916 ---------------
1929 ---------------
1917
1930
1918 Here are some numbers::
1931 Here are some numbers::
1919
1932
1920 7.x: 296 files, 12561 blank lines, 20282 comments, 35142 line of code.
1933 7.x: 296 files, 12561 blank lines, 20282 comments, 35142 line of code.
1921 8.0: 252 files, 12053 blank lines, 19232 comments, 34505 line of code.
1934 8.0: 252 files, 12053 blank lines, 19232 comments, 34505 line of code.
1922
1935
1923 $ git diff --stat 7.x...master | tail -1
1936 $ git diff --stat 7.x...master | tail -1
1924 340 files changed, 13399 insertions(+), 12421 deletions(-)
1937 340 files changed, 13399 insertions(+), 12421 deletions(-)
1925
1938
1926 We have commits from 162 authors, who contributed 1916 commits in 23 month, excluding merges (to not bias toward
1939 We have commits from 162 authors, who contributed 1916 commits in 23 month, excluding merges (to not bias toward
1927 maintainers pushing buttons).::
1940 maintainers pushing buttons).::
1928
1941
1929 $ git shortlog -s --no-merges 7.x...master | sort -nr
1942 $ git shortlog -s --no-merges 7.x...master | sort -nr
1930 535 Matthias Bussonnier
1943 535 Matthias Bussonnier
1931 86 Nikita Kniazev
1944 86 Nikita Kniazev
1932 69 Blazej Michalik
1945 69 Blazej Michalik
1933 49 Samuel Gaist
1946 49 Samuel Gaist
1934 27 Itamar Turner-Trauring
1947 27 Itamar Turner-Trauring
1935 18 Spas Kalaydzhisyki
1948 18 Spas Kalaydzhisyki
1936 17 Thomas Kluyver
1949 17 Thomas Kluyver
1937 17 Quentin Peter
1950 17 Quentin Peter
1938 17 James Morris
1951 17 James Morris
1939 17 Artur Svistunov
1952 17 Artur Svistunov
1940 15 Bart Skowron
1953 15 Bart Skowron
1941 14 Alex Hall
1954 14 Alex Hall
1942 13 rushabh-v
1955 13 rushabh-v
1943 13 Terry Davis
1956 13 Terry Davis
1944 13 Benjamin Ragan-Kelley
1957 13 Benjamin Ragan-Kelley
1945 8 martinRenou
1958 8 martinRenou
1946 8 farisachugthai
1959 8 farisachugthai
1947 7 dswij
1960 7 dswij
1948 7 Gal B
1961 7 Gal B
1949 7 Corentin Cadiou
1962 7 Corentin Cadiou
1950 6 yuji96
1963 6 yuji96
1951 6 Martin Skarzynski
1964 6 Martin Skarzynski
1952 6 Justin Palmer
1965 6 Justin Palmer
1953 6 Daniel Goldfarb
1966 6 Daniel Goldfarb
1954 6 Ben Greiner
1967 6 Ben Greiner
1955 5 Sammy Al Hashemi
1968 5 Sammy Al Hashemi
1956 5 Paul Ivanov
1969 5 Paul Ivanov
1957 5 Inception95
1970 5 Inception95
1958 5 Eyenpi
1971 5 Eyenpi
1959 5 Douglas Blank
1972 5 Douglas Blank
1960 5 Coco Mishra
1973 5 Coco Mishra
1961 5 Bibo Hao
1974 5 Bibo Hao
1962 5 AndrΓ© A. Gomes
1975 5 AndrΓ© A. Gomes
1963 5 Ahmed Fasih
1976 5 Ahmed Fasih
1964 4 takuya fujiwara
1977 4 takuya fujiwara
1965 4 palewire
1978 4 palewire
1966 4 Thomas A Caswell
1979 4 Thomas A Caswell
1967 4 Talley Lambert
1980 4 Talley Lambert
1968 4 Scott Sanderson
1981 4 Scott Sanderson
1969 4 Ram Rachum
1982 4 Ram Rachum
1970 4 Nick Muoh
1983 4 Nick Muoh
1971 4 Nathan Goldbaum
1984 4 Nathan Goldbaum
1972 4 Mithil Poojary
1985 4 Mithil Poojary
1973 4 Michael T
1986 4 Michael T
1974 4 Jakub Klus
1987 4 Jakub Klus
1975 4 Ian Castleden
1988 4 Ian Castleden
1976 4 Eli Rykoff
1989 4 Eli Rykoff
1977 4 Ashwin Vishnu
1990 4 Ashwin Vishnu
1978 3 谭九鼎
1991 3 谭九鼎
1979 3 sleeping
1992 3 sleeping
1980 3 Sylvain Corlay
1993 3 Sylvain Corlay
1981 3 Peter Corke
1994 3 Peter Corke
1982 3 Paul Bissex
1995 3 Paul Bissex
1983 3 Matthew Feickert
1996 3 Matthew Feickert
1984 3 Fernando Perez
1997 3 Fernando Perez
1985 3 Eric Wieser
1998 3 Eric Wieser
1986 3 Daniel Mietchen
1999 3 Daniel Mietchen
1987 3 Aditya Sathe
2000 3 Aditya Sathe
1988 3 007vedant
2001 3 007vedant
1989 2 rchiodo
2002 2 rchiodo
1990 2 nicolaslazo
2003 2 nicolaslazo
1991 2 luttik
2004 2 luttik
1992 2 gorogoroumaru
2005 2 gorogoroumaru
1993 2 foobarbyte
2006 2 foobarbyte
1994 2 bar-hen
2007 2 bar-hen
1995 2 Theo Ouzhinski
2008 2 Theo Ouzhinski
1996 2 Strawkage
2009 2 Strawkage
1997 2 Samreen Zarroug
2010 2 Samreen Zarroug
1998 2 Pete Blois
2011 2 Pete Blois
1999 2 Meysam Azad
2012 2 Meysam Azad
2000 2 Matthieu Ancellin
2013 2 Matthieu Ancellin
2001 2 Mark Schmitz
2014 2 Mark Schmitz
2002 2 Maor Kleinberger
2015 2 Maor Kleinberger
2003 2 MRCWirtz
2016 2 MRCWirtz
2004 2 Lumir Balhar
2017 2 Lumir Balhar
2005 2 Julien Rabinow
2018 2 Julien Rabinow
2006 2 Juan Luis Cano RodrΓ­guez
2019 2 Juan Luis Cano RodrΓ­guez
2007 2 Joyce Er
2020 2 Joyce Er
2008 2 Jakub
2021 2 Jakub
2009 2 Faris A Chugthai
2022 2 Faris A Chugthai
2010 2 Ethan Madden
2023 2 Ethan Madden
2011 2 Dimitri Papadopoulos
2024 2 Dimitri Papadopoulos
2012 2 Diego Fernandez
2025 2 Diego Fernandez
2013 2 Daniel Shimon
2026 2 Daniel Shimon
2014 2 Coco Bennett
2027 2 Coco Bennett
2015 2 Carlos Cordoba
2028 2 Carlos Cordoba
2016 2 Boyuan Liu
2029 2 Boyuan Liu
2017 2 BaoGiang HoangVu
2030 2 BaoGiang HoangVu
2018 2 Augusto
2031 2 Augusto
2019 2 Arthur Svistunov
2032 2 Arthur Svistunov
2020 2 Arthur Moreira
2033 2 Arthur Moreira
2021 2 Ali Nabipour
2034 2 Ali Nabipour
2022 2 Adam Hackbarth
2035 2 Adam Hackbarth
2023 1 richard
2036 1 richard
2024 1 linar-jether
2037 1 linar-jether
2025 1 lbennett
2038 1 lbennett
2026 1 juacrumar
2039 1 juacrumar
2027 1 gpotter2
2040 1 gpotter2
2028 1 digitalvirtuoso
2041 1 digitalvirtuoso
2029 1 dalthviz
2042 1 dalthviz
2030 1 Yonatan Goldschmidt
2043 1 Yonatan Goldschmidt
2031 1 Tomasz KΕ‚oczko
2044 1 Tomasz KΕ‚oczko
2032 1 Tobias Bengfort
2045 1 Tobias Bengfort
2033 1 Timur Kushukov
2046 1 Timur Kushukov
2034 1 Thomas
2047 1 Thomas
2035 1 Snir Broshi
2048 1 Snir Broshi
2036 1 Shao Yang Hong
2049 1 Shao Yang Hong
2037 1 Sanjana-03
2050 1 Sanjana-03
2038 1 Romulo Filho
2051 1 Romulo Filho
2039 1 Rodolfo Carvalho
2052 1 Rodolfo Carvalho
2040 1 Richard Shadrach
2053 1 Richard Shadrach
2041 1 Reilly Tucker Siemens
2054 1 Reilly Tucker Siemens
2042 1 Rakessh Roshan
2055 1 Rakessh Roshan
2043 1 Piers Titus van der Torren
2056 1 Piers Titus van der Torren
2044 1 PhanatosZou
2057 1 PhanatosZou
2045 1 Pavel Safronov
2058 1 Pavel Safronov
2046 1 Paulo S. Costa
2059 1 Paulo S. Costa
2047 1 Paul McCarthy
2060 1 Paul McCarthy
2048 1 NotWearingPants
2061 1 NotWearingPants
2049 1 Naelson Douglas
2062 1 Naelson Douglas
2050 1 Michael Tiemann
2063 1 Michael Tiemann
2051 1 Matt Wozniski
2064 1 Matt Wozniski
2052 1 Markus Wageringel
2065 1 Markus Wageringel
2053 1 Marcus Wirtz
2066 1 Marcus Wirtz
2054 1 Marcio Mazza
2067 1 Marcio Mazza
2055 1 LumΓ­r 'Frenzy' Balhar
2068 1 LumΓ­r 'Frenzy' Balhar
2056 1 Lightyagami1
2069 1 Lightyagami1
2057 1 Leon Anavi
2070 1 Leon Anavi
2058 1 LeafyLi
2071 1 LeafyLi
2059 1 L0uisJ0shua
2072 1 L0uisJ0shua
2060 1 Kyle Cutler
2073 1 Kyle Cutler
2061 1 Krzysztof Cybulski
2074 1 Krzysztof Cybulski
2062 1 Kevin Kirsche
2075 1 Kevin Kirsche
2063 1 KIU Shueng Chuan
2076 1 KIU Shueng Chuan
2064 1 Jonathan Slenders
2077 1 Jonathan Slenders
2065 1 Jay Qi
2078 1 Jay Qi
2066 1 Jake VanderPlas
2079 1 Jake VanderPlas
2067 1 Iwan Briquemont
2080 1 Iwan Briquemont
2068 1 Hussaina Begum Nandyala
2081 1 Hussaina Begum Nandyala
2069 1 Gordon Ball
2082 1 Gordon Ball
2070 1 Gabriel Simonetto
2083 1 Gabriel Simonetto
2071 1 Frank Tobia
2084 1 Frank Tobia
2072 1 Erik
2085 1 Erik
2073 1 Elliott Sales de Andrade
2086 1 Elliott Sales de Andrade
2074 1 Daniel Hahler
2087 1 Daniel Hahler
2075 1 Dan Green-Leipciger
2088 1 Dan Green-Leipciger
2076 1 Dan Green
2089 1 Dan Green
2077 1 Damian Yurzola
2090 1 Damian Yurzola
2078 1 Coon, Ethan T
2091 1 Coon, Ethan T
2079 1 Carol Willing
2092 1 Carol Willing
2080 1 Brian Lee
2093 1 Brian Lee
2081 1 Brendan Gerrity
2094 1 Brendan Gerrity
2082 1 Blake Griffin
2095 1 Blake Griffin
2083 1 Bastian Ebeling
2096 1 Bastian Ebeling
2084 1 Bartosz Telenczuk
2097 1 Bartosz Telenczuk
2085 1 Ankitsingh6299
2098 1 Ankitsingh6299
2086 1 Andrew Port
2099 1 Andrew Port
2087 1 Andrew J. Hesford
2100 1 Andrew J. Hesford
2088 1 Albert Zhang
2101 1 Albert Zhang
2089 1 Adam Johnson
2102 1 Adam Johnson
2090
2103
2091 This does not, of course, represent non-code contributions, for which we are also grateful.
2104 This does not, of course, represent non-code contributions, for which we are also grateful.
2092
2105
2093
2106
2094 API Changes using Frappuccino
2107 API Changes using Frappuccino
2095 -----------------------------
2108 -----------------------------
2096
2109
2097 This is an experimental exhaustive API difference using `Frappuccino <https://pypi.org/project/frappuccino/>`_
2110 This is an experimental exhaustive API difference using `Frappuccino <https://pypi.org/project/frappuccino/>`_
2098
2111
2099
2112
2100 The following items are new in IPython 8.0 ::
2113 The following items are new in IPython 8.0 ::
2101
2114
2102 + IPython.core.async_helpers.get_asyncio_loop()
2115 + IPython.core.async_helpers.get_asyncio_loop()
2103 + IPython.core.completer.Dict
2116 + IPython.core.completer.Dict
2104 + IPython.core.completer.Pattern
2117 + IPython.core.completer.Pattern
2105 + IPython.core.completer.Sequence
2118 + IPython.core.completer.Sequence
2106 + IPython.core.completer.__skip_doctest__
2119 + IPython.core.completer.__skip_doctest__
2107 + IPython.core.debugger.Pdb.precmd(self, line)
2120 + IPython.core.debugger.Pdb.precmd(self, line)
2108 + IPython.core.debugger.__skip_doctest__
2121 + IPython.core.debugger.__skip_doctest__
2109 + IPython.core.display.__getattr__(name)
2122 + IPython.core.display.__getattr__(name)
2110 + IPython.core.display.warn
2123 + IPython.core.display.warn
2111 + IPython.core.display_functions
2124 + IPython.core.display_functions
2112 + IPython.core.display_functions.DisplayHandle
2125 + IPython.core.display_functions.DisplayHandle
2113 + IPython.core.display_functions.DisplayHandle.display(self, obj, **kwargs)
2126 + IPython.core.display_functions.DisplayHandle.display(self, obj, **kwargs)
2114 + IPython.core.display_functions.DisplayHandle.update(self, obj, **kwargs)
2127 + IPython.core.display_functions.DisplayHandle.update(self, obj, **kwargs)
2115 + IPython.core.display_functions.__all__
2128 + IPython.core.display_functions.__all__
2116 + IPython.core.display_functions.__builtins__
2129 + IPython.core.display_functions.__builtins__
2117 + IPython.core.display_functions.__cached__
2130 + IPython.core.display_functions.__cached__
2118 + IPython.core.display_functions.__doc__
2131 + IPython.core.display_functions.__doc__
2119 + IPython.core.display_functions.__file__
2132 + IPython.core.display_functions.__file__
2120 + IPython.core.display_functions.__loader__
2133 + IPython.core.display_functions.__loader__
2121 + IPython.core.display_functions.__name__
2134 + IPython.core.display_functions.__name__
2122 + IPython.core.display_functions.__package__
2135 + IPython.core.display_functions.__package__
2123 + IPython.core.display_functions.__spec__
2136 + IPython.core.display_functions.__spec__
2124 + IPython.core.display_functions.b2a_hex
2137 + IPython.core.display_functions.b2a_hex
2125 + IPython.core.display_functions.clear_output(wait=False)
2138 + IPython.core.display_functions.clear_output(wait=False)
2126 + IPython.core.display_functions.display(*objs, include='None', exclude='None', metadata='None', transient='None', display_id='None', raw=False, clear=False, **kwargs)
2139 + IPython.core.display_functions.display(*objs, include='None', exclude='None', metadata='None', transient='None', display_id='None', raw=False, clear=False, **kwargs)
2127 + IPython.core.display_functions.publish_display_data(data, metadata='None', source='<deprecated>', *, transient='None', **kwargs)
2140 + IPython.core.display_functions.publish_display_data(data, metadata='None', source='<deprecated>', *, transient='None', **kwargs)
2128 + IPython.core.display_functions.update_display(obj, *, display_id, **kwargs)
2141 + IPython.core.display_functions.update_display(obj, *, display_id, **kwargs)
2129 + IPython.core.extensions.BUILTINS_EXTS
2142 + IPython.core.extensions.BUILTINS_EXTS
2130 + IPython.core.inputtransformer2.has_sunken_brackets(tokens)
2143 + IPython.core.inputtransformer2.has_sunken_brackets(tokens)
2131 + IPython.core.interactiveshell.Callable
2144 + IPython.core.interactiveshell.Callable
2132 + IPython.core.interactiveshell.__annotations__
2145 + IPython.core.interactiveshell.__annotations__
2133 + IPython.core.ultratb.List
2146 + IPython.core.ultratb.List
2134 + IPython.core.ultratb.Tuple
2147 + IPython.core.ultratb.Tuple
2135 + IPython.lib.pretty.CallExpression
2148 + IPython.lib.pretty.CallExpression
2136 + IPython.lib.pretty.CallExpression.factory(name)
2149 + IPython.lib.pretty.CallExpression.factory(name)
2137 + IPython.lib.pretty.RawStringLiteral
2150 + IPython.lib.pretty.RawStringLiteral
2138 + IPython.lib.pretty.RawText
2151 + IPython.lib.pretty.RawText
2139 + IPython.terminal.debugger.TerminalPdb.do_interact(self, arg)
2152 + IPython.terminal.debugger.TerminalPdb.do_interact(self, arg)
2140 + IPython.terminal.embed.Set
2153 + IPython.terminal.embed.Set
2141
2154
2142 The following items have been removed (or moved to superclass)::
2155 The following items have been removed (or moved to superclass)::
2143
2156
2144 - IPython.core.application.BaseIPythonApplication.initialize_subcommand
2157 - IPython.core.application.BaseIPythonApplication.initialize_subcommand
2145 - IPython.core.completer.Sentinel
2158 - IPython.core.completer.Sentinel
2146 - IPython.core.completer.skip_doctest
2159 - IPython.core.completer.skip_doctest
2147 - IPython.core.debugger.Tracer
2160 - IPython.core.debugger.Tracer
2148 - IPython.core.display.DisplayHandle
2161 - IPython.core.display.DisplayHandle
2149 - IPython.core.display.DisplayHandle.display
2162 - IPython.core.display.DisplayHandle.display
2150 - IPython.core.display.DisplayHandle.update
2163 - IPython.core.display.DisplayHandle.update
2151 - IPython.core.display.b2a_hex
2164 - IPython.core.display.b2a_hex
2152 - IPython.core.display.clear_output
2165 - IPython.core.display.clear_output
2153 - IPython.core.display.display
2166 - IPython.core.display.display
2154 - IPython.core.display.publish_display_data
2167 - IPython.core.display.publish_display_data
2155 - IPython.core.display.update_display
2168 - IPython.core.display.update_display
2156 - IPython.core.excolors.Deprec
2169 - IPython.core.excolors.Deprec
2157 - IPython.core.excolors.ExceptionColors
2170 - IPython.core.excolors.ExceptionColors
2158 - IPython.core.history.warn
2171 - IPython.core.history.warn
2159 - IPython.core.hooks.late_startup_hook
2172 - IPython.core.hooks.late_startup_hook
2160 - IPython.core.hooks.pre_run_code_hook
2173 - IPython.core.hooks.pre_run_code_hook
2161 - IPython.core.hooks.shutdown_hook
2174 - IPython.core.hooks.shutdown_hook
2162 - IPython.core.interactiveshell.InteractiveShell.init_deprecation_warnings
2175 - IPython.core.interactiveshell.InteractiveShell.init_deprecation_warnings
2163 - IPython.core.interactiveshell.InteractiveShell.init_readline
2176 - IPython.core.interactiveshell.InteractiveShell.init_readline
2164 - IPython.core.interactiveshell.InteractiveShell.write
2177 - IPython.core.interactiveshell.InteractiveShell.write
2165 - IPython.core.interactiveshell.InteractiveShell.write_err
2178 - IPython.core.interactiveshell.InteractiveShell.write_err
2166 - IPython.core.interactiveshell.get_default_colors
2179 - IPython.core.interactiveshell.get_default_colors
2167 - IPython.core.interactiveshell.removed_co_newlocals
2180 - IPython.core.interactiveshell.removed_co_newlocals
2168 - IPython.core.magics.execution.ExecutionMagics.profile_missing_notice
2181 - IPython.core.magics.execution.ExecutionMagics.profile_missing_notice
2169 - IPython.core.magics.script.PIPE
2182 - IPython.core.magics.script.PIPE
2170 - IPython.core.prefilter.PrefilterManager.init_transformers
2183 - IPython.core.prefilter.PrefilterManager.init_transformers
2171 - IPython.core.release.classifiers
2184 - IPython.core.release.classifiers
2172 - IPython.core.release.description
2185 - IPython.core.release.description
2173 - IPython.core.release.keywords
2186 - IPython.core.release.keywords
2174 - IPython.core.release.long_description
2187 - IPython.core.release.long_description
2175 - IPython.core.release.name
2188 - IPython.core.release.name
2176 - IPython.core.release.platforms
2189 - IPython.core.release.platforms
2177 - IPython.core.release.url
2190 - IPython.core.release.url
2178 - IPython.core.ultratb.VerboseTB.format_records
2191 - IPython.core.ultratb.VerboseTB.format_records
2179 - IPython.core.ultratb.find_recursion
2192 - IPython.core.ultratb.find_recursion
2180 - IPython.core.ultratb.findsource
2193 - IPython.core.ultratb.findsource
2181 - IPython.core.ultratb.fix_frame_records_filenames
2194 - IPython.core.ultratb.fix_frame_records_filenames
2182 - IPython.core.ultratb.inspect_error
2195 - IPython.core.ultratb.inspect_error
2183 - IPython.core.ultratb.is_recursion_error
2196 - IPython.core.ultratb.is_recursion_error
2184 - IPython.core.ultratb.with_patch_inspect
2197 - IPython.core.ultratb.with_patch_inspect
2185 - IPython.external.__all__
2198 - IPython.external.__all__
2186 - IPython.external.__builtins__
2199 - IPython.external.__builtins__
2187 - IPython.external.__cached__
2200 - IPython.external.__cached__
2188 - IPython.external.__doc__
2201 - IPython.external.__doc__
2189 - IPython.external.__file__
2202 - IPython.external.__file__
2190 - IPython.external.__loader__
2203 - IPython.external.__loader__
2191 - IPython.external.__name__
2204 - IPython.external.__name__
2192 - IPython.external.__package__
2205 - IPython.external.__package__
2193 - IPython.external.__path__
2206 - IPython.external.__path__
2194 - IPython.external.__spec__
2207 - IPython.external.__spec__
2195 - IPython.kernel.KernelConnectionInfo
2208 - IPython.kernel.KernelConnectionInfo
2196 - IPython.kernel.__builtins__
2209 - IPython.kernel.__builtins__
2197 - IPython.kernel.__cached__
2210 - IPython.kernel.__cached__
2198 - IPython.kernel.__warningregistry__
2211 - IPython.kernel.__warningregistry__
2199 - IPython.kernel.pkg
2212 - IPython.kernel.pkg
2200 - IPython.kernel.protocol_version
2213 - IPython.kernel.protocol_version
2201 - IPython.kernel.protocol_version_info
2214 - IPython.kernel.protocol_version_info
2202 - IPython.kernel.src
2215 - IPython.kernel.src
2203 - IPython.kernel.version_info
2216 - IPython.kernel.version_info
2204 - IPython.kernel.warn
2217 - IPython.kernel.warn
2205 - IPython.lib.backgroundjobs
2218 - IPython.lib.backgroundjobs
2206 - IPython.lib.backgroundjobs.BackgroundJobBase
2219 - IPython.lib.backgroundjobs.BackgroundJobBase
2207 - IPython.lib.backgroundjobs.BackgroundJobBase.run
2220 - IPython.lib.backgroundjobs.BackgroundJobBase.run
2208 - IPython.lib.backgroundjobs.BackgroundJobBase.traceback
2221 - IPython.lib.backgroundjobs.BackgroundJobBase.traceback
2209 - IPython.lib.backgroundjobs.BackgroundJobExpr
2222 - IPython.lib.backgroundjobs.BackgroundJobExpr
2210 - IPython.lib.backgroundjobs.BackgroundJobExpr.call
2223 - IPython.lib.backgroundjobs.BackgroundJobExpr.call
2211 - IPython.lib.backgroundjobs.BackgroundJobFunc
2224 - IPython.lib.backgroundjobs.BackgroundJobFunc
2212 - IPython.lib.backgroundjobs.BackgroundJobFunc.call
2225 - IPython.lib.backgroundjobs.BackgroundJobFunc.call
2213 - IPython.lib.backgroundjobs.BackgroundJobManager
2226 - IPython.lib.backgroundjobs.BackgroundJobManager
2214 - IPython.lib.backgroundjobs.BackgroundJobManager.flush
2227 - IPython.lib.backgroundjobs.BackgroundJobManager.flush
2215 - IPython.lib.backgroundjobs.BackgroundJobManager.new
2228 - IPython.lib.backgroundjobs.BackgroundJobManager.new
2216 - IPython.lib.backgroundjobs.BackgroundJobManager.remove
2229 - IPython.lib.backgroundjobs.BackgroundJobManager.remove
2217 - IPython.lib.backgroundjobs.BackgroundJobManager.result
2230 - IPython.lib.backgroundjobs.BackgroundJobManager.result
2218 - IPython.lib.backgroundjobs.BackgroundJobManager.status
2231 - IPython.lib.backgroundjobs.BackgroundJobManager.status
2219 - IPython.lib.backgroundjobs.BackgroundJobManager.traceback
2232 - IPython.lib.backgroundjobs.BackgroundJobManager.traceback
2220 - IPython.lib.backgroundjobs.__builtins__
2233 - IPython.lib.backgroundjobs.__builtins__
2221 - IPython.lib.backgroundjobs.__cached__
2234 - IPython.lib.backgroundjobs.__cached__
2222 - IPython.lib.backgroundjobs.__doc__
2235 - IPython.lib.backgroundjobs.__doc__
2223 - IPython.lib.backgroundjobs.__file__
2236 - IPython.lib.backgroundjobs.__file__
2224 - IPython.lib.backgroundjobs.__loader__
2237 - IPython.lib.backgroundjobs.__loader__
2225 - IPython.lib.backgroundjobs.__name__
2238 - IPython.lib.backgroundjobs.__name__
2226 - IPython.lib.backgroundjobs.__package__
2239 - IPython.lib.backgroundjobs.__package__
2227 - IPython.lib.backgroundjobs.__spec__
2240 - IPython.lib.backgroundjobs.__spec__
2228 - IPython.lib.kernel.__builtins__
2241 - IPython.lib.kernel.__builtins__
2229 - IPython.lib.kernel.__cached__
2242 - IPython.lib.kernel.__cached__
2230 - IPython.lib.kernel.__doc__
2243 - IPython.lib.kernel.__doc__
2231 - IPython.lib.kernel.__file__
2244 - IPython.lib.kernel.__file__
2232 - IPython.lib.kernel.__loader__
2245 - IPython.lib.kernel.__loader__
2233 - IPython.lib.kernel.__name__
2246 - IPython.lib.kernel.__name__
2234 - IPython.lib.kernel.__package__
2247 - IPython.lib.kernel.__package__
2235 - IPython.lib.kernel.__spec__
2248 - IPython.lib.kernel.__spec__
2236 - IPython.lib.kernel.__warningregistry__
2249 - IPython.lib.kernel.__warningregistry__
2237 - IPython.paths.fs_encoding
2250 - IPython.paths.fs_encoding
2238 - IPython.terminal.debugger.DEFAULT_BUFFER
2251 - IPython.terminal.debugger.DEFAULT_BUFFER
2239 - IPython.terminal.debugger.cursor_in_leading_ws
2252 - IPython.terminal.debugger.cursor_in_leading_ws
2240 - IPython.terminal.debugger.emacs_insert_mode
2253 - IPython.terminal.debugger.emacs_insert_mode
2241 - IPython.terminal.debugger.has_selection
2254 - IPython.terminal.debugger.has_selection
2242 - IPython.terminal.debugger.vi_insert_mode
2255 - IPython.terminal.debugger.vi_insert_mode
2243 - IPython.terminal.interactiveshell.DISPLAY_BANNER_DEPRECATED
2256 - IPython.terminal.interactiveshell.DISPLAY_BANNER_DEPRECATED
2244 - IPython.terminal.ipapp.TerminalIPythonApp.parse_command_line
2257 - IPython.terminal.ipapp.TerminalIPythonApp.parse_command_line
2245 - IPython.testing.test
2258 - IPython.testing.test
2246 - IPython.utils.contexts.NoOpContext
2259 - IPython.utils.contexts.NoOpContext
2247 - IPython.utils.io.IOStream
2260 - IPython.utils.io.IOStream
2248 - IPython.utils.io.IOStream.close
2261 - IPython.utils.io.IOStream.close
2249 - IPython.utils.io.IOStream.write
2262 - IPython.utils.io.IOStream.write
2250 - IPython.utils.io.IOStream.writelines
2263 - IPython.utils.io.IOStream.writelines
2251 - IPython.utils.io.__warningregistry__
2264 - IPython.utils.io.__warningregistry__
2252 - IPython.utils.io.atomic_writing
2265 - IPython.utils.io.atomic_writing
2253 - IPython.utils.io.stderr
2266 - IPython.utils.io.stderr
2254 - IPython.utils.io.stdin
2267 - IPython.utils.io.stdin
2255 - IPython.utils.io.stdout
2268 - IPython.utils.io.stdout
2256 - IPython.utils.io.unicode_std_stream
2269 - IPython.utils.io.unicode_std_stream
2257 - IPython.utils.path.get_ipython_cache_dir
2270 - IPython.utils.path.get_ipython_cache_dir
2258 - IPython.utils.path.get_ipython_dir
2271 - IPython.utils.path.get_ipython_dir
2259 - IPython.utils.path.get_ipython_module_path
2272 - IPython.utils.path.get_ipython_module_path
2260 - IPython.utils.path.get_ipython_package_dir
2273 - IPython.utils.path.get_ipython_package_dir
2261 - IPython.utils.path.locate_profile
2274 - IPython.utils.path.locate_profile
2262 - IPython.utils.path.unquote_filename
2275 - IPython.utils.path.unquote_filename
2263 - IPython.utils.py3compat.PY2
2276 - IPython.utils.py3compat.PY2
2264 - IPython.utils.py3compat.PY3
2277 - IPython.utils.py3compat.PY3
2265 - IPython.utils.py3compat.buffer_to_bytes
2278 - IPython.utils.py3compat.buffer_to_bytes
2266 - IPython.utils.py3compat.builtin_mod_name
2279 - IPython.utils.py3compat.builtin_mod_name
2267 - IPython.utils.py3compat.cast_bytes
2280 - IPython.utils.py3compat.cast_bytes
2268 - IPython.utils.py3compat.getcwd
2281 - IPython.utils.py3compat.getcwd
2269 - IPython.utils.py3compat.isidentifier
2282 - IPython.utils.py3compat.isidentifier
2270 - IPython.utils.py3compat.u_format
2283 - IPython.utils.py3compat.u_format
2271
2284
2272 The following signatures differ between 7.x and 8.0::
2285 The following signatures differ between 7.x and 8.0::
2273
2286
2274 - IPython.core.completer.IPCompleter.unicode_name_matches(self, text)
2287 - IPython.core.completer.IPCompleter.unicode_name_matches(self, text)
2275 + IPython.core.completer.IPCompleter.unicode_name_matches(text)
2288 + IPython.core.completer.IPCompleter.unicode_name_matches(text)
2276
2289
2277 - IPython.core.completer.match_dict_keys(keys, prefix, delims)
2290 - IPython.core.completer.match_dict_keys(keys, prefix, delims)
2278 + IPython.core.completer.match_dict_keys(keys, prefix, delims, extra_prefix='None')
2291 + IPython.core.completer.match_dict_keys(keys, prefix, delims, extra_prefix='None')
2279
2292
2280 - IPython.core.interactiveshell.InteractiveShell.object_inspect_mime(self, oname, detail_level=0)
2293 - IPython.core.interactiveshell.InteractiveShell.object_inspect_mime(self, oname, detail_level=0)
2281 + IPython.core.interactiveshell.InteractiveShell.object_inspect_mime(self, oname, detail_level=0, omit_sections='()')
2294 + IPython.core.interactiveshell.InteractiveShell.object_inspect_mime(self, oname, detail_level=0, omit_sections='()')
2282
2295
2283 - IPython.core.interactiveshell.InteractiveShell.set_hook(self, name, hook, priority=50, str_key='None', re_key='None', _warn_deprecated=True)
2296 - IPython.core.interactiveshell.InteractiveShell.set_hook(self, name, hook, priority=50, str_key='None', re_key='None', _warn_deprecated=True)
2284 + IPython.core.interactiveshell.InteractiveShell.set_hook(self, name, hook, priority=50, str_key='None', re_key='None')
2297 + IPython.core.interactiveshell.InteractiveShell.set_hook(self, name, hook, priority=50, str_key='None', re_key='None')
2285
2298
2286 - IPython.core.oinspect.Inspector.info(self, obj, oname='', formatter='None', info='None', detail_level=0)
2299 - IPython.core.oinspect.Inspector.info(self, obj, oname='', formatter='None', info='None', detail_level=0)
2287 + IPython.core.oinspect.Inspector.info(self, obj, oname='', info='None', detail_level=0)
2300 + IPython.core.oinspect.Inspector.info(self, obj, oname='', info='None', detail_level=0)
2288
2301
2289 - IPython.core.oinspect.Inspector.pinfo(self, obj, oname='', formatter='None', info='None', detail_level=0, enable_html_pager=True)
2302 - IPython.core.oinspect.Inspector.pinfo(self, obj, oname='', formatter='None', info='None', detail_level=0, enable_html_pager=True)
2290 + IPython.core.oinspect.Inspector.pinfo(self, obj, oname='', formatter='None', info='None', detail_level=0, enable_html_pager=True, omit_sections='()')
2303 + IPython.core.oinspect.Inspector.pinfo(self, obj, oname='', formatter='None', info='None', detail_level=0, enable_html_pager=True, omit_sections='()')
2291
2304
2292 - IPython.core.profiledir.ProfileDir.copy_config_file(self, config_file, path='None', overwrite=False)
2305 - IPython.core.profiledir.ProfileDir.copy_config_file(self, config_file, path='None', overwrite=False)
2293 + IPython.core.profiledir.ProfileDir.copy_config_file(self, config_file, path, overwrite=False)
2306 + IPython.core.profiledir.ProfileDir.copy_config_file(self, config_file, path, overwrite=False)
2294
2307
2295 - IPython.core.ultratb.VerboseTB.format_record(self, frame, file, lnum, func, lines, index)
2308 - IPython.core.ultratb.VerboseTB.format_record(self, frame, file, lnum, func, lines, index)
2296 + IPython.core.ultratb.VerboseTB.format_record(self, frame_info)
2309 + IPython.core.ultratb.VerboseTB.format_record(self, frame_info)
2297
2310
2298 - IPython.terminal.embed.InteractiveShellEmbed.mainloop(self, local_ns='None', module='None', stack_depth=0, display_banner='None', global_ns='None', compile_flags='None')
2311 - IPython.terminal.embed.InteractiveShellEmbed.mainloop(self, local_ns='None', module='None', stack_depth=0, display_banner='None', global_ns='None', compile_flags='None')
2299 + IPython.terminal.embed.InteractiveShellEmbed.mainloop(self, local_ns='None', module='None', stack_depth=0, compile_flags='None')
2312 + IPython.terminal.embed.InteractiveShellEmbed.mainloop(self, local_ns='None', module='None', stack_depth=0, compile_flags='None')
2300
2313
2301 - IPython.terminal.embed.embed(**kwargs)
2314 - IPython.terminal.embed.embed(**kwargs)
2302 + IPython.terminal.embed.embed(*, header='', compile_flags='None', **kwargs)
2315 + IPython.terminal.embed.embed(*, header='', compile_flags='None', **kwargs)
2303
2316
2304 - IPython.terminal.interactiveshell.TerminalInteractiveShell.interact(self, display_banner='<object object at 0xffffff>')
2317 - IPython.terminal.interactiveshell.TerminalInteractiveShell.interact(self, display_banner='<object object at 0xffffff>')
2305 + IPython.terminal.interactiveshell.TerminalInteractiveShell.interact(self)
2318 + IPython.terminal.interactiveshell.TerminalInteractiveShell.interact(self)
2306
2319
2307 - IPython.terminal.interactiveshell.TerminalInteractiveShell.mainloop(self, display_banner='<object object at 0xffffff>')
2320 - IPython.terminal.interactiveshell.TerminalInteractiveShell.mainloop(self, display_banner='<object object at 0xffffff>')
2308 + IPython.terminal.interactiveshell.TerminalInteractiveShell.mainloop(self)
2321 + IPython.terminal.interactiveshell.TerminalInteractiveShell.mainloop(self)
2309
2322
2310 - IPython.utils.path.get_py_filename(name, force_win32='None')
2323 - IPython.utils.path.get_py_filename(name, force_win32='None')
2311 + IPython.utils.path.get_py_filename(name)
2324 + IPython.utils.path.get_py_filename(name)
2312
2325
2313 The following are new attributes (that might be inherited)::
2326 The following are new attributes (that might be inherited)::
2314
2327
2315 + IPython.core.completer.IPCompleter.unicode_names
2328 + IPython.core.completer.IPCompleter.unicode_names
2316 + IPython.core.debugger.InterruptiblePdb.precmd
2329 + IPython.core.debugger.InterruptiblePdb.precmd
2317 + IPython.core.debugger.Pdb.precmd
2330 + IPython.core.debugger.Pdb.precmd
2318 + IPython.core.ultratb.AutoFormattedTB.has_colors
2331 + IPython.core.ultratb.AutoFormattedTB.has_colors
2319 + IPython.core.ultratb.ColorTB.has_colors
2332 + IPython.core.ultratb.ColorTB.has_colors
2320 + IPython.core.ultratb.FormattedTB.has_colors
2333 + IPython.core.ultratb.FormattedTB.has_colors
2321 + IPython.core.ultratb.ListTB.has_colors
2334 + IPython.core.ultratb.ListTB.has_colors
2322 + IPython.core.ultratb.SyntaxTB.has_colors
2335 + IPython.core.ultratb.SyntaxTB.has_colors
2323 + IPython.core.ultratb.TBTools.has_colors
2336 + IPython.core.ultratb.TBTools.has_colors
2324 + IPython.core.ultratb.VerboseTB.has_colors
2337 + IPython.core.ultratb.VerboseTB.has_colors
2325 + IPython.terminal.debugger.TerminalPdb.do_interact
2338 + IPython.terminal.debugger.TerminalPdb.do_interact
2326 + IPython.terminal.debugger.TerminalPdb.precmd
2339 + IPython.terminal.debugger.TerminalPdb.precmd
2327
2340
2328 The following attribute/methods have been removed::
2341 The following attribute/methods have been removed::
2329
2342
2330 - IPython.core.application.BaseIPythonApplication.deprecated_subcommands
2343 - IPython.core.application.BaseIPythonApplication.deprecated_subcommands
2331 - IPython.core.ultratb.AutoFormattedTB.format_records
2344 - IPython.core.ultratb.AutoFormattedTB.format_records
2332 - IPython.core.ultratb.ColorTB.format_records
2345 - IPython.core.ultratb.ColorTB.format_records
2333 - IPython.core.ultratb.FormattedTB.format_records
2346 - IPython.core.ultratb.FormattedTB.format_records
2334 - IPython.terminal.embed.InteractiveShellEmbed.init_deprecation_warnings
2347 - IPython.terminal.embed.InteractiveShellEmbed.init_deprecation_warnings
2335 - IPython.terminal.embed.InteractiveShellEmbed.init_readline
2348 - IPython.terminal.embed.InteractiveShellEmbed.init_readline
2336 - IPython.terminal.embed.InteractiveShellEmbed.write
2349 - IPython.terminal.embed.InteractiveShellEmbed.write
2337 - IPython.terminal.embed.InteractiveShellEmbed.write_err
2350 - IPython.terminal.embed.InteractiveShellEmbed.write_err
2338 - IPython.terminal.interactiveshell.TerminalInteractiveShell.init_deprecation_warnings
2351 - IPython.terminal.interactiveshell.TerminalInteractiveShell.init_deprecation_warnings
2339 - IPython.terminal.interactiveshell.TerminalInteractiveShell.init_readline
2352 - IPython.terminal.interactiveshell.TerminalInteractiveShell.init_readline
2340 - IPython.terminal.interactiveshell.TerminalInteractiveShell.write
2353 - IPython.terminal.interactiveshell.TerminalInteractiveShell.write
2341 - IPython.terminal.interactiveshell.TerminalInteractiveShell.write_err
2354 - IPython.terminal.interactiveshell.TerminalInteractiveShell.write_err
2342 - IPython.terminal.ipapp.LocateIPythonApp.deprecated_subcommands
2355 - IPython.terminal.ipapp.LocateIPythonApp.deprecated_subcommands
2343 - IPython.terminal.ipapp.LocateIPythonApp.initialize_subcommand
2356 - IPython.terminal.ipapp.LocateIPythonApp.initialize_subcommand
2344 - IPython.terminal.ipapp.TerminalIPythonApp.deprecated_subcommands
2357 - IPython.terminal.ipapp.TerminalIPythonApp.deprecated_subcommands
2345 - IPython.terminal.ipapp.TerminalIPythonApp.initialize_subcommand
2358 - IPython.terminal.ipapp.TerminalIPythonApp.initialize_subcommand
2346
2359
2347 ------
2360 ------
2348
2361
2349 .. [1] If this make you incomfortable feel free to not use IPython 8.23.
2362 .. [1] If this make you incomfortable feel free to not use IPython 8.23.
General Comments 0
You need to be logged in to leave comments. Login now