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