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