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