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