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