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