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