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