##// END OF EJS Templates
DOC: Update what's new for 8.10
Matthias Bussonnier -
Show More
@@ -1,1384 +1,1409 b''
1 ============
1 ============
2 8.x Series
2 8.x Series
3 ============
3 ============
4
4
5
5
6 IPython 8.9.1
6 .. _version 8.10.0:
7 -------------
7
8 IPython 8.10
9 ------------
8
10
9 Out of schedule release of IPython with minor fixes to patch a potential CVE-2023-24816.
11 Out of schedule release of IPython with minor fixes to patch a potential CVE-2023-24816.
10 This is a really low severity CVE that you most likely are not affected by unless:
12 This is a really low severity CVE that you most likely are not affected by unless:
11
13
12 - You are on windows.
14 - You are on windows.
13 - You have a custom build of Python without ``_ctypes``
15 - You have a custom build of Python without ``_ctypes``
14 - You cd or start IPython or Jupyter in untrusted directory which names may be valid shell commands.
16 - You cd or start IPython or Jupyter in untrusted directory which names may be
17 valid shell commands.
18
19 You can read more on `the advisory
20 <https://github.com/ipython/ipython/security/advisories/GHSA-29gw-9793-fvw7>`__.
21
22 In addition to fixing this CVE we also fix a couple of outstanding bugs and issues.
23
24 As usual you can find the full list of PRs on GitHub under `the 8.10 milestone
25 <https://github.com/ipython/ipython/milestone/112?closed=1>`__.
26
27 In Particular:
28
29 - bump minimum numpy to `>=1.21` version following NEP29. :ghpull:`13930`
30 - fix for compatibility with MyPy 1.0. :ghpull:`13933`
31 - fix nbgrader stalling when IPython's ``showtraceback`` function is
32 monkeypatched. :ghpull:`13934`
33
34
35
36 As this release also contains those minimal changes in addition to fixing the
37 CVE I decided to bump the minor version anyway.
15
38
39 This will not affect the normal release schedule, so IPython 8.11 is due in
40 about 2 weeks.
16
41
17 .. _version 8.9.0:
42 .. _version 8.9.0:
18
43
19 IPython 8.9.0
44 IPython 8.9.0
20 -------------
45 -------------
21
46
22 Second release of IPython in 2023, last Friday of the month, we are back on
47 Second release of IPython in 2023, last Friday of the month, we are back on
23 track. This is a small release with a few bug-fixes, and improvements, mostly
48 track. This is a small release with a few bug-fixes, and improvements, mostly
24 with respect to terminal shortcuts.
49 with respect to terminal shortcuts.
25
50
26
51
27 The biggest improvement for 8.9 is a drastic amelioration of the
52 The biggest improvement for 8.9 is a drastic amelioration of the
28 auto-suggestions sponsored by D.E. Shaw and implemented by the more and more
53 auto-suggestions sponsored by D.E. Shaw and implemented by the more and more
29 active contributor `@krassowski <https://github.com/krassowski>`.
54 active contributor `@krassowski <https://github.com/krassowski>`.
30
55
31 - ``right`` accepts a single character from suggestion
56 - ``right`` accepts a single character from suggestion
32 - ``ctrl+right`` accepts a semantic token (macos default shortcuts take
57 - ``ctrl+right`` accepts a semantic token (macos default shortcuts take
33 precedence and need to be disabled to make this work)
58 precedence and need to be disabled to make this work)
34 - ``backspace`` deletes a character and resumes hinting autosuggestions
59 - ``backspace`` deletes a character and resumes hinting autosuggestions
35 - ``ctrl-left`` accepts suggestion and moves cursor left one character.
60 - ``ctrl-left`` accepts suggestion and moves cursor left one character.
36 - ``backspace`` deletes a character and resumes hinting autosuggestions
61 - ``backspace`` deletes a character and resumes hinting autosuggestions
37 - ``down`` moves to suggestion to later in history when no lines are present below the cursors.
62 - ``down`` moves to suggestion to later in history when no lines are present below the cursors.
38 - ``up`` moves to suggestion from earlier in history when no lines are present above the cursor.
63 - ``up`` moves to suggestion from earlier in history when no lines are present above the cursor.
39
64
40 This is best described by the Gif posted by `@krassowski
65 This is best described by the Gif posted by `@krassowski
41 <https://github.com/krassowski>`, and in the PR itself :ghpull:`13888`.
66 <https://github.com/krassowski>`, and in the PR itself :ghpull:`13888`.
42
67
43 .. image:: ../_images/autosuggest.gif
68 .. image:: ../_images/autosuggest.gif
44
69
45 Please report any feedback in order for us to improve the user experience.
70 Please report any feedback in order for us to improve the user experience.
46 In particular we are also working on making the shortcuts configurable.
71 In particular we are also working on making the shortcuts configurable.
47
72
48 If you are interested in better terminal shortcuts, I also invite you to
73 If you are interested in better terminal shortcuts, I also invite you to
49 participate in issue `13879
74 participate in issue `13879
50 <https://github.com/ipython/ipython/issues/13879>`__.
75 <https://github.com/ipython/ipython/issues/13879>`__.
51
76
52
77
53 As we follow `NEP29
78 As we follow `NEP29
54 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`__, next version of
79 <https://numpy.org/neps/nep-0029-deprecation_policy.html>`__, next version of
55 IPython will officially stop supporting numpy 1.20, and will stop supporting
80 IPython will officially stop supporting numpy 1.20, and will stop supporting
56 Python 3.8 after April release.
81 Python 3.8 after April release.
57
82
58 As usual you can find the full list of PRs on GitHub under `the 8.9 milestone
83 As usual you can find the full list of PRs on GitHub under `the 8.9 milestone
59 <https://github.com/ipython/ipython/milestone/111?closed=1>`__.
84 <https://github.com/ipython/ipython/milestone/111?closed=1>`__.
60
85
61
86
62 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
87 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
63 work on IPython and related libraries.
88 work on IPython and related libraries.
64
89
65 .. _version 8.8.0:
90 .. _version 8.8.0:
66
91
67 IPython 8.8.0
92 IPython 8.8.0
68 -------------
93 -------------
69
94
70 First release of IPython in 2023 as there was no release at the end of
95 First release of IPython in 2023 as there was no release at the end of
71 December.
96 December.
72
97
73 This is an unusually big release (relatively speaking) with more than 15 Pull
98 This is an unusually big release (relatively speaking) with more than 15 Pull
74 Requests merged.
99 Requests merged.
75
100
76 Of particular interest are:
101 Of particular interest are:
77
102
78 - :ghpull:`13852` that replaces the greedy completer and improves
103 - :ghpull:`13852` that replaces the greedy completer and improves
79 completion, in particular for dictionary keys.
104 completion, in particular for dictionary keys.
80 - :ghpull:`13858` that adds ``py.typed`` to ``setup.cfg`` to make sure it is
105 - :ghpull:`13858` that adds ``py.typed`` to ``setup.cfg`` to make sure it is
81 bundled in wheels.
106 bundled in wheels.
82 - :ghpull:`13869` that implements tab completions for IPython options in the
107 - :ghpull:`13869` that implements tab completions for IPython options in the
83 shell when using `argcomplete <https://github.com/kislyuk/argcomplete>`. I
108 shell when using `argcomplete <https://github.com/kislyuk/argcomplete>`. I
84 believe this also needs a recent version of Traitlets.
109 believe this also needs a recent version of Traitlets.
85 - :ghpull:`13865` makes the ``inspector`` class of `InteractiveShell`
110 - :ghpull:`13865` makes the ``inspector`` class of `InteractiveShell`
86 configurable.
111 configurable.
87 - :ghpull:`13880` that removes minor-version entrypoints as the minor version
112 - :ghpull:`13880` that removes minor-version entrypoints as the minor version
88 entry points that would be included in the wheel would be the one of the
113 entry points that would be included in the wheel would be the one of the
89 Python version that was used to build the ``whl`` file.
114 Python version that was used to build the ``whl`` file.
90
115
91 In no particular order, the rest of the changes update the test suite to be
116 In no particular order, the rest of the changes update the test suite to be
92 compatible with Pygments 2.14, various docfixes, testing on more recent python
117 compatible with Pygments 2.14, various docfixes, testing on more recent python
93 versions and various updates.
118 versions and various updates.
94
119
95 As usual you can find the full list of PRs on GitHub under `the 8.8 milestone
120 As usual you can find the full list of PRs on GitHub under `the 8.8 milestone
96 <https://github.com/ipython/ipython/milestone/110>`__.
121 <https://github.com/ipython/ipython/milestone/110>`__.
97
122
98 Many thanks to @krassowski for the many PRs and @jasongrout for reviewing and
123 Many thanks to @krassowski for the many PRs and @jasongrout for reviewing and
99 merging contributions.
124 merging contributions.
100
125
101 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
126 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
102 work on IPython and related libraries.
127 work on IPython and related libraries.
103
128
104 .. _version 8.7.0:
129 .. _version 8.7.0:
105
130
106 IPython 8.7.0
131 IPython 8.7.0
107 -------------
132 -------------
108
133
109
134
110 Small release of IPython with a couple of bug fixes and new features for this
135 Small release of IPython with a couple of bug fixes and new features for this
111 month. Next month is the end of year, it is unclear if there will be a release
136 month. Next month is the end of year, it is unclear if there will be a release
112 close to the new year's eve, or if the next release will be at the end of January.
137 close to the new year's eve, or if the next release will be at the end of January.
113
138
114 Here are a few of the relevant fixes,
139 Here are a few of the relevant fixes,
115 as usual you can find the full list of PRs on GitHub under `the 8.7 milestone
140 as usual you can find the full list of PRs on GitHub under `the 8.7 milestone
116 <https://github.com/ipython/ipython/pulls?q=milestone%3A8.7>`__.
141 <https://github.com/ipython/ipython/pulls?q=milestone%3A8.7>`__.
117
142
118
143
119 - :ghpull:`13834` bump the minimum prompt toolkit to 3.0.11.
144 - :ghpull:`13834` bump the minimum prompt toolkit to 3.0.11.
120 - IPython shipped with the ``py.typed`` marker now, and we are progressively
145 - IPython shipped with the ``py.typed`` marker now, and we are progressively
121 adding more types. :ghpull:`13831`
146 adding more types. :ghpull:`13831`
122 - :ghpull:`13817` add configuration of code blacks formatting.
147 - :ghpull:`13817` add configuration of code blacks formatting.
123
148
124
149
125 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
150 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
126 work on IPython and related libraries.
151 work on IPython and related libraries.
127
152
128
153
129 .. _version 8.6.0:
154 .. _version 8.6.0:
130
155
131 IPython 8.6.0
156 IPython 8.6.0
132 -------------
157 -------------
133
158
134 Back to a more regular release schedule (at least I try), as Friday is
159 Back to a more regular release schedule (at least I try), as Friday is
135 already over by more than 24h hours. This is a slightly bigger release with a
160 already over by more than 24h hours. This is a slightly bigger release with a
136 few new features that contain no less than 25 PRs.
161 few new features that contain no less than 25 PRs.
137
162
138 We'll notably found a couple of non negligible changes:
163 We'll notably found a couple of non negligible changes:
139
164
140 The ``install_ext`` and related functions have been removed after being
165 The ``install_ext`` and related functions have been removed after being
141 deprecated for years. You can use pip to install extensions. ``pip`` did not
166 deprecated for years. You can use pip to install extensions. ``pip`` did not
142 exist when ``install_ext`` was introduced. You can still load local extensions
167 exist when ``install_ext`` was introduced. You can still load local extensions
143 without installing them. Just set your ``sys.path`` for example. :ghpull:`13744`
168 without installing them. Just set your ``sys.path`` for example. :ghpull:`13744`
144
169
145 IPython now has extra entry points that use the major *and minor* version of
170 IPython now has extra entry points that use the major *and minor* version of
146 python. For some of you this means that you can do a quick ``ipython3.10`` to
171 python. For some of you this means that you can do a quick ``ipython3.10`` to
147 launch IPython from the Python 3.10 interpreter, while still using Python 3.11
172 launch IPython from the Python 3.10 interpreter, while still using Python 3.11
148 as your main Python. :ghpull:`13743`
173 as your main Python. :ghpull:`13743`
149
174
150 The completer matcher API has been improved. See :ghpull:`13745`. This should
175 The completer matcher API has been improved. See :ghpull:`13745`. This should
151 improve the type inference and improve dict keys completions in many use case.
176 improve the type inference and improve dict keys completions in many use case.
152 Thanks ``@krassowski`` for all the work, and the D.E. Shaw group for sponsoring
177 Thanks ``@krassowski`` for all the work, and the D.E. Shaw group for sponsoring
153 it.
178 it.
154
179
155 The color of error nodes in tracebacks can now be customized. See
180 The color of error nodes in tracebacks can now be customized. See
156 :ghpull:`13756`. This is a private attribute until someone finds the time to
181 :ghpull:`13756`. This is a private attribute until someone finds the time to
157 properly add a configuration option. Note that with Python 3.11 that also shows
182 properly add a configuration option. Note that with Python 3.11 that also shows
158 the relevant nodes in traceback, it would be good to leverage this information
183 the relevant nodes in traceback, it would be good to leverage this information
159 (plus the "did you mean" info added on attribute errors). But that's likely work
184 (plus the "did you mean" info added on attribute errors). But that's likely work
160 I won't have time to do before long, so contributions welcome.
185 I won't have time to do before long, so contributions welcome.
161
186
162 As we follow NEP 29, we removed support for numpy 1.19 :ghpull:`13760`.
187 As we follow NEP 29, we removed support for numpy 1.19 :ghpull:`13760`.
163
188
164
189
165 The ``open()`` function present in the user namespace by default will now refuse
190 The ``open()`` function present in the user namespace by default will now refuse
166 to open the file descriptors 0,1,2 (stdin, out, err), to avoid crashing IPython.
191 to open the file descriptors 0,1,2 (stdin, out, err), to avoid crashing IPython.
167 This mostly occurs in teaching context when incorrect values get passed around.
192 This mostly occurs in teaching context when incorrect values get passed around.
168
193
169
194
170 The ``?``, ``??``, and corresponding ``pinfo``, ``pinfo2`` magics can now find
195 The ``?``, ``??``, and corresponding ``pinfo``, ``pinfo2`` magics can now find
171 objects inside arrays. That is to say, the following now works::
196 objects inside arrays. That is to say, the following now works::
172
197
173
198
174 >>> def my_func(*arg, **kwargs):pass
199 >>> def my_func(*arg, **kwargs):pass
175 >>> container = [my_func]
200 >>> container = [my_func]
176 >>> container[0]?
201 >>> container[0]?
177
202
178
203
179 If ``container`` define a custom ``getitem``, this __will__ trigger the custom
204 If ``container`` define a custom ``getitem``, this __will__ trigger the custom
180 method. So don't put side effects in your ``getitems``. Thanks to the D.E. Shaw
205 method. So don't put side effects in your ``getitems``. Thanks to the D.E. Shaw
181 group for the request and sponsoring the work.
206 group for the request and sponsoring the work.
182
207
183
208
184 As usual you can find the full list of PRs on GitHub under `the 8.6 milestone
209 As usual you can find the full list of PRs on GitHub under `the 8.6 milestone
185 <https://github.com/ipython/ipython/pulls?q=milestone%3A8.6>`__.
210 <https://github.com/ipython/ipython/pulls?q=milestone%3A8.6>`__.
186
211
187 Thanks to all hacktoberfest contributors, please contribute to
212 Thanks to all hacktoberfest contributors, please contribute to
188 `closember.org <https://closember.org/>`__.
213 `closember.org <https://closember.org/>`__.
189
214
190 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
215 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
191 work on IPython and related libraries.
216 work on IPython and related libraries.
192
217
193 .. _version 8.5.0:
218 .. _version 8.5.0:
194
219
195 IPython 8.5.0
220 IPython 8.5.0
196 -------------
221 -------------
197
222
198 First release since a couple of month due to various reasons and timing preventing
223 First release since a couple of month due to various reasons and timing preventing
199 me for sticking to the usual monthly release the last Friday of each month. This
224 me for sticking to the usual monthly release the last Friday of each month. This
200 is of non negligible size as it has more than two dozen PRs with various fixes
225 is of non negligible size as it has more than two dozen PRs with various fixes
201 an bug fixes.
226 an bug fixes.
202
227
203 Many thanks to everybody who contributed PRs for your patience in review and
228 Many thanks to everybody who contributed PRs for your patience in review and
204 merges.
229 merges.
205
230
206 Here is a non-exhaustive list of changes that have been implemented for IPython
231 Here is a non-exhaustive list of changes that have been implemented for IPython
207 8.5.0. As usual you can find the full list of issues and PRs tagged with `the
232 8.5.0. As usual you can find the full list of issues and PRs tagged with `the
208 8.5 milestone
233 8.5 milestone
209 <https://github.com/ipython/ipython/pulls?q=is%3Aclosed+milestone%3A8.5+>`__.
234 <https://github.com/ipython/ipython/pulls?q=is%3Aclosed+milestone%3A8.5+>`__.
210
235
211 - Added a shortcut for accepting auto suggestion. The End key shortcut for
236 - Added a shortcut for accepting auto suggestion. The End key shortcut for
212 accepting auto-suggestion This binding works in Vi mode too, provided
237 accepting auto-suggestion This binding works in Vi mode too, provided
213 ``TerminalInteractiveShell.emacs_bindings_in_vi_insert_mode`` is set to be
238 ``TerminalInteractiveShell.emacs_bindings_in_vi_insert_mode`` is set to be
214 ``True`` :ghpull:`13566`.
239 ``True`` :ghpull:`13566`.
215
240
216 - No popup in window for latex generation when generating latex (e.g. via
241 - No popup in window for latex generation when generating latex (e.g. via
217 `_latex_repr_`) no popup window is shows under Windows. :ghpull:`13679`
242 `_latex_repr_`) no popup window is shows under Windows. :ghpull:`13679`
218
243
219 - Fixed error raised when attempting to tab-complete an input string with
244 - Fixed error raised when attempting to tab-complete an input string with
220 consecutive periods or forward slashes (such as "file:///var/log/...").
245 consecutive periods or forward slashes (such as "file:///var/log/...").
221 :ghpull:`13675`
246 :ghpull:`13675`
222
247
223 - Relative filenames in Latex rendering :
248 - Relative filenames in Latex rendering :
224 The `latex_to_png_dvipng` command internally generates input and output file
249 The `latex_to_png_dvipng` command internally generates input and output file
225 arguments to `latex` and `dvipis`. These arguments are now generated as
250 arguments to `latex` and `dvipis`. These arguments are now generated as
226 relative files to the current working directory instead of absolute file
251 relative files to the current working directory instead of absolute file
227 paths. This solves a problem where the current working directory contains
252 paths. This solves a problem where the current working directory contains
228 characters that are not handled properly by `latex` and `dvips`. There are
253 characters that are not handled properly by `latex` and `dvips`. There are
229 no changes to the user API. :ghpull:`13680`
254 no changes to the user API. :ghpull:`13680`
230
255
231 - Stripping decorators bug: Fixed bug which meant that ipython code blocks in
256 - Stripping decorators bug: Fixed bug which meant that ipython code blocks in
232 restructured text documents executed with the ipython-sphinx extension
257 restructured text documents executed with the ipython-sphinx extension
233 skipped any lines of code containing python decorators. :ghpull:`13612`
258 skipped any lines of code containing python decorators. :ghpull:`13612`
234
259
235 - Allow some modules with frozen dataclasses to be reloaded. :ghpull:`13732`
260 - Allow some modules with frozen dataclasses to be reloaded. :ghpull:`13732`
236 - Fix paste magic on wayland. :ghpull:`13671`
261 - Fix paste magic on wayland. :ghpull:`13671`
237 - show maxlen in deque's repr. :ghpull:`13648`
262 - show maxlen in deque's repr. :ghpull:`13648`
238
263
239 Restore line numbers for Input
264 Restore line numbers for Input
240 ------------------------------
265 ------------------------------
241
266
242 Line number information in tracebacks from input are restored.
267 Line number information in tracebacks from input are restored.
243 Line numbers from input were removed during the transition to v8 enhanced traceback reporting.
268 Line numbers from input were removed during the transition to v8 enhanced traceback reporting.
244
269
245 So, instead of::
270 So, instead of::
246
271
247 ---------------------------------------------------------------------------
272 ---------------------------------------------------------------------------
248 ZeroDivisionError Traceback (most recent call last)
273 ZeroDivisionError Traceback (most recent call last)
249 Input In [3], in <cell line: 1>()
274 Input In [3], in <cell line: 1>()
250 ----> 1 myfunc(2)
275 ----> 1 myfunc(2)
251
276
252 Input In [2], in myfunc(z)
277 Input In [2], in myfunc(z)
253 1 def myfunc(z):
278 1 def myfunc(z):
254 ----> 2 foo.boo(z-1)
279 ----> 2 foo.boo(z-1)
255
280
256 File ~/code/python/ipython/foo.py:3, in boo(x)
281 File ~/code/python/ipython/foo.py:3, in boo(x)
257 2 def boo(x):
282 2 def boo(x):
258 ----> 3 return 1/(1-x)
283 ----> 3 return 1/(1-x)
259
284
260 ZeroDivisionError: division by zero
285 ZeroDivisionError: division by zero
261
286
262 The error traceback now looks like::
287 The error traceback now looks like::
263
288
264 ---------------------------------------------------------------------------
289 ---------------------------------------------------------------------------
265 ZeroDivisionError Traceback (most recent call last)
290 ZeroDivisionError Traceback (most recent call last)
266 Cell In [3], line 1
291 Cell In [3], line 1
267 ----> 1 myfunc(2)
292 ----> 1 myfunc(2)
268
293
269 Cell In [2], line 2, in myfunc(z)
294 Cell In [2], line 2, in myfunc(z)
270 1 def myfunc(z):
295 1 def myfunc(z):
271 ----> 2 foo.boo(z-1)
296 ----> 2 foo.boo(z-1)
272
297
273 File ~/code/python/ipython/foo.py:3, in boo(x)
298 File ~/code/python/ipython/foo.py:3, in boo(x)
274 2 def boo(x):
299 2 def boo(x):
275 ----> 3 return 1/(1-x)
300 ----> 3 return 1/(1-x)
276
301
277 ZeroDivisionError: division by zero
302 ZeroDivisionError: division by zero
278
303
279 or, with xmode=Plain::
304 or, with xmode=Plain::
280
305
281 Traceback (most recent call last):
306 Traceback (most recent call last):
282 Cell In [12], line 1
307 Cell In [12], line 1
283 myfunc(2)
308 myfunc(2)
284 Cell In [6], line 2 in myfunc
309 Cell In [6], line 2 in myfunc
285 foo.boo(z-1)
310 foo.boo(z-1)
286 File ~/code/python/ipython/foo.py:3 in boo
311 File ~/code/python/ipython/foo.py:3 in boo
287 return 1/(1-x)
312 return 1/(1-x)
288 ZeroDivisionError: division by zero
313 ZeroDivisionError: division by zero
289
314
290 :ghpull:`13560`
315 :ghpull:`13560`
291
316
292 New setting to silence warning if working inside a virtual environment
317 New setting to silence warning if working inside a virtual environment
293 ----------------------------------------------------------------------
318 ----------------------------------------------------------------------
294
319
295 Previously, when starting IPython in a virtual environment without IPython installed (so IPython from the global environment is used), the following warning was printed:
320 Previously, when starting IPython in a virtual environment without IPython installed (so IPython from the global environment is used), the following warning was printed:
296
321
297 Attempting to work in a virtualenv. If you encounter problems, please install IPython inside the virtualenv.
322 Attempting to work in a virtualenv. If you encounter problems, please install IPython inside the virtualenv.
298
323
299 This warning can be permanently silenced by setting ``c.InteractiveShell.warn_venv`` to ``False`` (the default is ``True``).
324 This warning can be permanently silenced by setting ``c.InteractiveShell.warn_venv`` to ``False`` (the default is ``True``).
300
325
301 :ghpull:`13706`
326 :ghpull:`13706`
302
327
303 -------
328 -------
304
329
305 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
330 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
306 work on IPython and related libraries.
331 work on IPython and related libraries.
307
332
308
333
309 .. _version 8.4.0:
334 .. _version 8.4.0:
310
335
311 IPython 8.4.0
336 IPython 8.4.0
312 -------------
337 -------------
313
338
314 As for 7.34, this version contains a single fix: fix uncaught BdbQuit exceptions on ipdb
339 As for 7.34, this version contains a single fix: fix uncaught BdbQuit exceptions on ipdb
315 exit :ghpull:`13668`, and a single typo fix in documentation: :ghpull:`13682`
340 exit :ghpull:`13668`, and a single typo fix in documentation: :ghpull:`13682`
316
341
317 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
342 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
318 work on IPython and related libraries.
343 work on IPython and related libraries.
319
344
320
345
321 .. _version 8.3.0:
346 .. _version 8.3.0:
322
347
323 IPython 8.3.0
348 IPython 8.3.0
324 -------------
349 -------------
325
350
326 - :ghpull:`13625`, using ``?``, ``??``, ``*?`` will not call
351 - :ghpull:`13625`, using ``?``, ``??``, ``*?`` will not call
327 ``set_next_input`` as most frontend allow proper multiline editing and it was
352 ``set_next_input`` as most frontend allow proper multiline editing and it was
328 causing issues for many users of multi-cell frontends. This has been backported to 7.33
353 causing issues for many users of multi-cell frontends. This has been backported to 7.33
329
354
330
355
331 - :ghpull:`13600`, ``pre_run_*``-hooks will now have a ``cell_id`` attribute on
356 - :ghpull:`13600`, ``pre_run_*``-hooks will now have a ``cell_id`` attribute on
332 the info object when frontend provides it. This has been backported to 7.33
357 the info object when frontend provides it. This has been backported to 7.33
333
358
334 - :ghpull:`13624`, fixed :kbd:`End` key being broken after accepting an
359 - :ghpull:`13624`, fixed :kbd:`End` key being broken after accepting an
335 auto-suggestion.
360 auto-suggestion.
336
361
337 - :ghpull:`13657` fixed an issue where history from different sessions would be mixed.
362 - :ghpull:`13657` fixed an issue where history from different sessions would be mixed.
338
363
339 .. _version 8.2.0:
364 .. _version 8.2.0:
340
365
341 IPython 8.2.0
366 IPython 8.2.0
342 -------------
367 -------------
343
368
344 IPython 8.2 mostly bring bugfixes to IPython.
369 IPython 8.2 mostly bring bugfixes to IPython.
345
370
346 - Auto-suggestion can now be elected with the ``end`` key. :ghpull:`13566`
371 - Auto-suggestion can now be elected with the ``end`` key. :ghpull:`13566`
347 - Some traceback issues with ``assert etb is not None`` have been fixed. :ghpull:`13588`
372 - Some traceback issues with ``assert etb is not None`` have been fixed. :ghpull:`13588`
348 - History is now pulled from the sqitel database and not from in-memory.
373 - History is now pulled from the sqitel database and not from in-memory.
349 In particular when using the ``%paste`` magic, the content of the pasted text will
374 In particular when using the ``%paste`` magic, the content of the pasted text will
350 be part of the history and not the verbatim text ``%paste`` anymore. :ghpull:`13592`
375 be part of the history and not the verbatim text ``%paste`` anymore. :ghpull:`13592`
351 - Fix ``Ctrl-\\`` exit cleanup :ghpull:`13603`
376 - Fix ``Ctrl-\\`` exit cleanup :ghpull:`13603`
352 - Fixes to ``ultratb`` ipdb support when used outside of IPython. :ghpull:`13498`
377 - Fixes to ``ultratb`` ipdb support when used outside of IPython. :ghpull:`13498`
353
378
354
379
355 I am still trying to fix and investigate :ghissue:`13598`, which seems to be
380 I am still trying to fix and investigate :ghissue:`13598`, which seems to be
356 random, and would appreciate help if you find a reproducible minimal case. I've
381 random, and would appreciate help if you find a reproducible minimal case. I've
357 tried to make various changes to the codebase to mitigate it, but a proper fix
382 tried to make various changes to the codebase to mitigate it, but a proper fix
358 will be difficult without understanding the cause.
383 will be difficult without understanding the cause.
359
384
360
385
361 All the issues on pull-requests for this release can be found in the `8.2
386 All the issues on pull-requests for this release can be found in the `8.2
362 milestone. <https://github.com/ipython/ipython/milestone/100>`__ . And some
387 milestone. <https://github.com/ipython/ipython/milestone/100>`__ . And some
363 documentation only PR can be found as part of the `7.33 milestone
388 documentation only PR can be found as part of the `7.33 milestone
364 <https://github.com/ipython/ipython/milestone/101>`__ (currently not released).
389 <https://github.com/ipython/ipython/milestone/101>`__ (currently not released).
365
390
366 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
391 Thanks to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
367 work on IPython and related libraries.
392 work on IPython and related libraries.
368
393
369 .. _version 8.1.1:
394 .. _version 8.1.1:
370
395
371 IPython 8.1.1
396 IPython 8.1.1
372 -------------
397 -------------
373
398
374 Fix an issue with virtualenv and Python 3.8 introduced in 8.1
399 Fix an issue with virtualenv and Python 3.8 introduced in 8.1
375
400
376 Revert :ghpull:`13537` (fix an issue with symlinks in virtualenv) that raises an
401 Revert :ghpull:`13537` (fix an issue with symlinks in virtualenv) that raises an
377 error in Python 3.8, and fixed in a different way in :ghpull:`13559`.
402 error in Python 3.8, and fixed in a different way in :ghpull:`13559`.
378
403
379 .. _version 8.1:
404 .. _version 8.1:
380
405
381 IPython 8.1.0
406 IPython 8.1.0
382 -------------
407 -------------
383
408
384 IPython 8.1 is the first minor release after 8.0 and fixes a number of bugs and
409 IPython 8.1 is the first minor release after 8.0 and fixes a number of bugs and
385 updates a few behaviors that were problematic with the 8.0 as with many new major
410 updates a few behaviors that were problematic with the 8.0 as with many new major
386 release.
411 release.
387
412
388 Note that beyond the changes listed here, IPython 8.1.0 also contains all the
413 Note that beyond the changes listed here, IPython 8.1.0 also contains all the
389 features listed in :ref:`version 7.32`.
414 features listed in :ref:`version 7.32`.
390
415
391 - Misc and multiple fixes around quotation auto-closing. It is now disabled by
416 - Misc and multiple fixes around quotation auto-closing. It is now disabled by
392 default. Run with ``TerminalInteractiveShell.auto_match=True`` to re-enabled
417 default. Run with ``TerminalInteractiveShell.auto_match=True`` to re-enabled
393 - Require pygments>=2.4.0 :ghpull:`13459`, this was implicit in the code, but
418 - Require pygments>=2.4.0 :ghpull:`13459`, this was implicit in the code, but
394 is now explicit in ``setup.cfg``/``setup.py``
419 is now explicit in ``setup.cfg``/``setup.py``
395 - Docs improvement of ``core.magic_arguments`` examples. :ghpull:`13433`
420 - Docs improvement of ``core.magic_arguments`` examples. :ghpull:`13433`
396 - Multi-line edit executes too early with await. :ghpull:`13424`
421 - Multi-line edit executes too early with await. :ghpull:`13424`
397
422
398 - ``black`` is back as an optional dependency, and autoformatting disabled by
423 - ``black`` is back as an optional dependency, and autoformatting disabled by
399 default until some fixes are implemented (black improperly reformat magics).
424 default until some fixes are implemented (black improperly reformat magics).
400 :ghpull:`13471` Additionally the ability to use ``yapf`` as a code
425 :ghpull:`13471` Additionally the ability to use ``yapf`` as a code
401 reformatter has been added :ghpull:`13528` . You can use
426 reformatter has been added :ghpull:`13528` . You can use
402 ``TerminalInteractiveShell.autoformatter="black"``,
427 ``TerminalInteractiveShell.autoformatter="black"``,
403 ``TerminalInteractiveShell.autoformatter="yapf"`` to re-enable auto formating
428 ``TerminalInteractiveShell.autoformatter="yapf"`` to re-enable auto formating
404 with black, or switch to yapf.
429 with black, or switch to yapf.
405
430
406 - Fix and issue where ``display`` was not defined.
431 - Fix and issue where ``display`` was not defined.
407
432
408 - Auto suggestions are now configurable. Currently only
433 - Auto suggestions are now configurable. Currently only
409 ``AutoSuggestFromHistory`` (default) and ``None``. new provider contribution
434 ``AutoSuggestFromHistory`` (default) and ``None``. new provider contribution
410 welcomed. :ghpull:`13475`
435 welcomed. :ghpull:`13475`
411
436
412 - multiple packaging/testing improvement to simplify downstream packaging
437 - multiple packaging/testing improvement to simplify downstream packaging
413 (xfail with reasons, try to not access network...).
438 (xfail with reasons, try to not access network...).
414
439
415 - Update deprecation. ``InteractiveShell.magic`` internal method has been
440 - Update deprecation. ``InteractiveShell.magic`` internal method has been
416 deprecated for many years but did not emit a warning until now.
441 deprecated for many years but did not emit a warning until now.
417
442
418 - internal ``appended_to_syspath`` context manager has been deprecated.
443 - internal ``appended_to_syspath`` context manager has been deprecated.
419
444
420 - fix an issue with symlinks in virtualenv :ghpull:`13537` (Reverted in 8.1.1)
445 - fix an issue with symlinks in virtualenv :ghpull:`13537` (Reverted in 8.1.1)
421
446
422 - Fix an issue with vim mode, where cursor would not be reset on exit :ghpull:`13472`
447 - Fix an issue with vim mode, where cursor would not be reset on exit :ghpull:`13472`
423
448
424 - ipython directive now remove only known pseudo-decorators :ghpull:`13532`
449 - ipython directive now remove only known pseudo-decorators :ghpull:`13532`
425
450
426 - ``IPython/lib/security`` which used to be used for jupyter notebook has been
451 - ``IPython/lib/security`` which used to be used for jupyter notebook has been
427 removed.
452 removed.
428
453
429 - Fix an issue where ``async with`` would execute on new lines. :ghpull:`13436`
454 - Fix an issue where ``async with`` would execute on new lines. :ghpull:`13436`
430
455
431
456
432 We want to remind users that IPython is part of the Jupyter organisations, and
457 We want to remind users that IPython is part of the Jupyter organisations, and
433 thus governed by a Code of Conduct. Some of the behavior we have seen on GitHub is not acceptable.
458 thus governed by a Code of Conduct. Some of the behavior we have seen on GitHub is not acceptable.
434 Abuse and non-respectful comments on discussion will not be tolerated.
459 Abuse and non-respectful comments on discussion will not be tolerated.
435
460
436 Many thanks to all the contributors to this release, many of the above fixed issues and
461 Many thanks to all the contributors to this release, many of the above fixed issues and
437 new features were done by first time contributors, showing there is still
462 new features were done by first time contributors, showing there is still
438 plenty of easy contribution possible in IPython
463 plenty of easy contribution possible in IPython
439 . You can find all individual contributions
464 . You can find all individual contributions
440 to this milestone `on github <https://github.com/ipython/ipython/milestone/91>`__.
465 to this milestone `on github <https://github.com/ipython/ipython/milestone/91>`__.
441
466
442 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
467 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
443 work on IPython and related libraries. In particular the Lazy autoloading of
468 work on IPython and related libraries. In particular the Lazy autoloading of
444 magics that you will find described in the 7.32 release notes.
469 magics that you will find described in the 7.32 release notes.
445
470
446
471
447 .. _version 8.0.1:
472 .. _version 8.0.1:
448
473
449 IPython 8.0.1 (CVE-2022-21699)
474 IPython 8.0.1 (CVE-2022-21699)
450 ------------------------------
475 ------------------------------
451
476
452 IPython 8.0.1, 7.31.1 and 5.11 are security releases that change some default
477 IPython 8.0.1, 7.31.1 and 5.11 are security releases that change some default
453 values in order to prevent potential Execution with Unnecessary Privileges.
478 values in order to prevent potential Execution with Unnecessary Privileges.
454
479
455 Almost all version of IPython looks for configuration and profiles in current
480 Almost all version of IPython looks for configuration and profiles in current
456 working directory. Since IPython was developed before pip and environments
481 working directory. Since IPython was developed before pip and environments
457 existed it was used a convenient way to load code/packages in a project
482 existed it was used a convenient way to load code/packages in a project
458 dependant way.
483 dependant way.
459
484
460 In 2022, it is not necessary anymore, and can lead to confusing behavior where
485 In 2022, it is not necessary anymore, and can lead to confusing behavior where
461 for example cloning a repository and starting IPython or loading a notebook from
486 for example cloning a repository and starting IPython or loading a notebook from
462 any Jupyter-Compatible interface that has ipython set as a kernel can lead to
487 any Jupyter-Compatible interface that has ipython set as a kernel can lead to
463 code execution.
488 code execution.
464
489
465
490
466 I did not find any standard way for packaged to advertise CVEs they fix, I'm
491 I did not find any standard way for packaged to advertise CVEs they fix, I'm
467 thus trying to add a ``__patched_cves__`` attribute to the IPython module that
492 thus trying to add a ``__patched_cves__`` attribute to the IPython module that
468 list the CVEs that should have been fixed. This attribute is informational only
493 list the CVEs that should have been fixed. This attribute is informational only
469 as if a executable has a flaw, this value can always be changed by an attacker.
494 as if a executable has a flaw, this value can always be changed by an attacker.
470
495
471 .. code::
496 .. code::
472
497
473 In [1]: import IPython
498 In [1]: import IPython
474
499
475 In [2]: IPython.__patched_cves__
500 In [2]: IPython.__patched_cves__
476 Out[2]: {'CVE-2022-21699'}
501 Out[2]: {'CVE-2022-21699'}
477
502
478 In [3]: 'CVE-2022-21699' in IPython.__patched_cves__
503 In [3]: 'CVE-2022-21699' in IPython.__patched_cves__
479 Out[3]: True
504 Out[3]: True
480
505
481 Thus starting with this version:
506 Thus starting with this version:
482
507
483 - The current working directory is not searched anymore for profiles or
508 - The current working directory is not searched anymore for profiles or
484 configurations files.
509 configurations files.
485 - Added a ``__patched_cves__`` attribute (set of strings) to IPython module that contain
510 - Added a ``__patched_cves__`` attribute (set of strings) to IPython module that contain
486 the list of fixed CVE. This is informational only.
511 the list of fixed CVE. This is informational only.
487
512
488 Further details can be read on the `GitHub Advisory <https://github.com/ipython/ipython/security/advisories/GHSA-pq7m-3gw7-gq5x>`__
513 Further details can be read on the `GitHub Advisory <https://github.com/ipython/ipython/security/advisories/GHSA-pq7m-3gw7-gq5x>`__
489
514
490
515
491 .. _version 8.0:
516 .. _version 8.0:
492
517
493 IPython 8.0
518 IPython 8.0
494 -----------
519 -----------
495
520
496 IPython 8.0 is bringing a large number of new features and improvements to both the
521 IPython 8.0 is bringing a large number of new features and improvements to both the
497 user of the terminal and of the kernel via Jupyter. The removal of compatibility
522 user of the terminal and of the kernel via Jupyter. The removal of compatibility
498 with an older version of Python is also the opportunity to do a couple of
523 with an older version of Python is also the opportunity to do a couple of
499 performance improvements in particular with respect to startup time.
524 performance improvements in particular with respect to startup time.
500 The 8.x branch started diverging from its predecessor around IPython 7.12
525 The 8.x branch started diverging from its predecessor around IPython 7.12
501 (January 2020).
526 (January 2020).
502
527
503 This release contains 250+ pull requests, in addition to many of the features
528 This release contains 250+ pull requests, in addition to many of the features
504 and backports that have made it to the 7.x branch. Please see the
529 and backports that have made it to the 7.x branch. Please see the
505 `8.0 milestone <https://github.com/ipython/ipython/milestone/73?closed=1>`__ for the full list of pull requests.
530 `8.0 milestone <https://github.com/ipython/ipython/milestone/73?closed=1>`__ for the full list of pull requests.
506
531
507 Please feel free to send pull requests to update those notes after release,
532 Please feel free to send pull requests to update those notes after release,
508 I have likely forgotten a few things reviewing 250+ PRs.
533 I have likely forgotten a few things reviewing 250+ PRs.
509
534
510 Dependencies changes/downstream packaging
535 Dependencies changes/downstream packaging
511 -----------------------------------------
536 -----------------------------------------
512
537
513 Most of our building steps have been changed to be (mostly) declarative
538 Most of our building steps have been changed to be (mostly) declarative
514 and follow PEP 517. We are trying to completely remove ``setup.py`` (:ghpull:`13238`) and are
539 and follow PEP 517. We are trying to completely remove ``setup.py`` (:ghpull:`13238`) and are
515 looking for help to do so.
540 looking for help to do so.
516
541
517 - minimum supported ``traitlets`` version is now 5+
542 - minimum supported ``traitlets`` version is now 5+
518 - we now require ``stack_data``
543 - we now require ``stack_data``
519 - minimal Python is now 3.8
544 - minimal Python is now 3.8
520 - ``nose`` is not a testing requirement anymore
545 - ``nose`` is not a testing requirement anymore
521 - ``pytest`` replaces nose.
546 - ``pytest`` replaces nose.
522 - ``iptest``/``iptest3`` cli entrypoints do not exist anymore.
547 - ``iptest``/``iptest3`` cli entrypoints do not exist anymore.
523 - the minimum officially ​supported ``numpy`` version has been bumped, but this should
548 - the minimum officially ​supported ``numpy`` version has been bumped, but this should
524 not have much effect on packaging.
549 not have much effect on packaging.
525
550
526
551
527 Deprecation and removal
552 Deprecation and removal
528 -----------------------
553 -----------------------
529
554
530 We removed almost all features, arguments, functions, and modules that were
555 We removed almost all features, arguments, functions, and modules that were
531 marked as deprecated between IPython 1.0 and 5.0. As a reminder, 5.0 was released
556 marked as deprecated between IPython 1.0 and 5.0. As a reminder, 5.0 was released
532 in 2016, and 1.0 in 2013. Last release of the 5 branch was 5.10.0, in May 2020.
557 in 2016, and 1.0 in 2013. Last release of the 5 branch was 5.10.0, in May 2020.
533 The few remaining deprecated features we left have better deprecation warnings
558 The few remaining deprecated features we left have better deprecation warnings
534 or have been turned into explicit errors for better error messages.
559 or have been turned into explicit errors for better error messages.
535
560
536 I will use this occasion to add the following requests to anyone emitting a
561 I will use this occasion to add the following requests to anyone emitting a
537 deprecation warning:
562 deprecation warning:
538
563
539 - Please add at least ``stacklevel=2`` so that the warning is emitted into the
564 - Please add at least ``stacklevel=2`` so that the warning is emitted into the
540 caller context, and not the callee one.
565 caller context, and not the callee one.
541 - Please add **since which version** something is deprecated.
566 - Please add **since which version** something is deprecated.
542
567
543 As a side note, it is much easier to conditionally compare version
568 As a side note, it is much easier to conditionally compare version
544 numbers rather than using ``try/except`` when functionality changes with a version.
569 numbers rather than using ``try/except`` when functionality changes with a version.
545
570
546 I won't list all the removed features here, but modules like ``IPython.kernel``,
571 I won't list all the removed features here, but modules like ``IPython.kernel``,
547 which was just a shim module around ``ipykernel`` for the past 8 years, have been
572 which was just a shim module around ``ipykernel`` for the past 8 years, have been
548 removed, and so many other similar things that pre-date the name **Jupyter**
573 removed, and so many other similar things that pre-date the name **Jupyter**
549 itself.
574 itself.
550
575
551 We no longer need to add ``IPython.extensions`` to the PYTHONPATH because that is being
576 We no longer need to add ``IPython.extensions`` to the PYTHONPATH because that is being
552 handled by ``load_extension``.
577 handled by ``load_extension``.
553
578
554 We are also removing ``Cythonmagic``, ``sympyprinting`` and ``rmagic`` as they are now in
579 We are also removing ``Cythonmagic``, ``sympyprinting`` and ``rmagic`` as they are now in
555 other packages and no longer need to be inside IPython.
580 other packages and no longer need to be inside IPython.
556
581
557
582
558 Documentation
583 Documentation
559 -------------
584 -------------
560
585
561 The majority of our docstrings have now been reformatted and automatically fixed by
586 The majority of our docstrings have now been reformatted and automatically fixed by
562 the experimental `VΓ©lin <https://pypi.org/project/velin/>`_ project to conform
587 the experimental `VΓ©lin <https://pypi.org/project/velin/>`_ project to conform
563 to numpydoc.
588 to numpydoc.
564
589
565 Type annotations
590 Type annotations
566 ----------------
591 ----------------
567
592
568 While IPython itself is highly dynamic and can't be completely typed, many of
593 While IPython itself is highly dynamic and can't be completely typed, many of
569 the functions now have type annotations, and part of the codebase is now checked
594 the functions now have type annotations, and part of the codebase is now checked
570 by mypy.
595 by mypy.
571
596
572
597
573 Featured changes
598 Featured changes
574 ----------------
599 ----------------
575
600
576 Here is a features list of changes in IPython 8.0. This is of course non-exhaustive.
601 Here is a features list of changes in IPython 8.0. This is of course non-exhaustive.
577 Please note as well that many features have been added in the 7.x branch as well
602 Please note as well that many features have been added in the 7.x branch as well
578 (and hence why you want to read the 7.x what's new notes), in particular
603 (and hence why you want to read the 7.x what's new notes), in particular
579 features contributed by QuantStack (with respect to debugger protocol and Xeus
604 features contributed by QuantStack (with respect to debugger protocol and Xeus
580 Python), as well as many debugger features that I was pleased to implement as
605 Python), as well as many debugger features that I was pleased to implement as
581 part of my work at QuanSight and sponsored by DE Shaw.
606 part of my work at QuanSight and sponsored by DE Shaw.
582
607
583 Traceback improvements
608 Traceback improvements
584 ~~~~~~~~~~~~~~~~~~~~~~
609 ~~~~~~~~~~~~~~~~~~~~~~
585
610
586 Previously, error tracebacks for errors happening in code cells were showing a
611 Previously, error tracebacks for errors happening in code cells were showing a
587 hash, the one used for compiling the Python AST::
612 hash, the one used for compiling the Python AST::
588
613
589 In [1]: def foo():
614 In [1]: def foo():
590 ...: return 3 / 0
615 ...: return 3 / 0
591 ...:
616 ...:
592
617
593 In [2]: foo()
618 In [2]: foo()
594 ---------------------------------------------------------------------------
619 ---------------------------------------------------------------------------
595 ZeroDivisionError Traceback (most recent call last)
620 ZeroDivisionError Traceback (most recent call last)
596 <ipython-input-2-c19b6d9633cf> in <module>
621 <ipython-input-2-c19b6d9633cf> in <module>
597 ----> 1 foo()
622 ----> 1 foo()
598
623
599 <ipython-input-1-1595a74c32d5> in foo()
624 <ipython-input-1-1595a74c32d5> in foo()
600 1 def foo():
625 1 def foo():
601 ----> 2 return 3 / 0
626 ----> 2 return 3 / 0
602 3
627 3
603
628
604 ZeroDivisionError: division by zero
629 ZeroDivisionError: division by zero
605
630
606 The error traceback is now correctly formatted, showing the cell number in which the error happened::
631 The error traceback is now correctly formatted, showing the cell number in which the error happened::
607
632
608 In [1]: def foo():
633 In [1]: def foo():
609 ...: return 3 / 0
634 ...: return 3 / 0
610 ...:
635 ...:
611
636
612 Input In [2]: foo()
637 Input In [2]: foo()
613 ---------------------------------------------------------------------------
638 ---------------------------------------------------------------------------
614 ZeroDivisionError Traceback (most recent call last)
639 ZeroDivisionError Traceback (most recent call last)
615 input In [2], in <module>
640 input In [2], in <module>
616 ----> 1 foo()
641 ----> 1 foo()
617
642
618 Input In [1], in foo()
643 Input In [1], in foo()
619 1 def foo():
644 1 def foo():
620 ----> 2 return 3 / 0
645 ----> 2 return 3 / 0
621
646
622 ZeroDivisionError: division by zero
647 ZeroDivisionError: division by zero
623
648
624 The ``stack_data`` package has been integrated, which provides smarter information in the traceback;
649 The ``stack_data`` package has been integrated, which provides smarter information in the traceback;
625 in particular it will highlight the AST node where an error occurs which can help to quickly narrow down errors.
650 in particular it will highlight the AST node where an error occurs which can help to quickly narrow down errors.
626
651
627 For example in the following snippet::
652 For example in the following snippet::
628
653
629 def foo(i):
654 def foo(i):
630 x = [[[0]]]
655 x = [[[0]]]
631 return x[0][i][0]
656 return x[0][i][0]
632
657
633
658
634 def bar():
659 def bar():
635 return foo(0) + foo(
660 return foo(0) + foo(
636 1
661 1
637 ) + foo(2)
662 ) + foo(2)
638
663
639
664
640 calling ``bar()`` would raise an ``IndexError`` on the return line of ``foo``,
665 calling ``bar()`` would raise an ``IndexError`` on the return line of ``foo``,
641 and IPython 8.0 is capable of telling you where the index error occurs::
666 and IPython 8.0 is capable of telling you where the index error occurs::
642
667
643
668
644 IndexError
669 IndexError
645 Input In [2], in <module>
670 Input In [2], in <module>
646 ----> 1 bar()
671 ----> 1 bar()
647 ^^^^^
672 ^^^^^
648
673
649 Input In [1], in bar()
674 Input In [1], in bar()
650 6 def bar():
675 6 def bar():
651 ----> 7 return foo(0) + foo(
676 ----> 7 return foo(0) + foo(
652 ^^^^
677 ^^^^
653 8 1
678 8 1
654 ^^^^^^^^
679 ^^^^^^^^
655 9 ) + foo(2)
680 9 ) + foo(2)
656 ^^^^
681 ^^^^
657
682
658 Input In [1], in foo(i)
683 Input In [1], in foo(i)
659 1 def foo(i):
684 1 def foo(i):
660 2 x = [[[0]]]
685 2 x = [[[0]]]
661 ----> 3 return x[0][i][0]
686 ----> 3 return x[0][i][0]
662 ^^^^^^^
687 ^^^^^^^
663
688
664 The corresponding locations marked here with ``^`` will show up highlighted in
689 The corresponding locations marked here with ``^`` will show up highlighted in
665 the terminal and notebooks.
690 the terminal and notebooks.
666
691
667 Finally, a colon ``::`` and line number is appended after a filename in
692 Finally, a colon ``::`` and line number is appended after a filename in
668 traceback::
693 traceback::
669
694
670
695
671 ZeroDivisionError Traceback (most recent call last)
696 ZeroDivisionError Traceback (most recent call last)
672 File ~/error.py:4, in <module>
697 File ~/error.py:4, in <module>
673 1 def f():
698 1 def f():
674 2 1/0
699 2 1/0
675 ----> 4 f()
700 ----> 4 f()
676
701
677 File ~/error.py:2, in f()
702 File ~/error.py:2, in f()
678 1 def f():
703 1 def f():
679 ----> 2 1/0
704 ----> 2 1/0
680
705
681 Many terminals and editors have integrations enabling you to directly jump to the
706 Many terminals and editors have integrations enabling you to directly jump to the
682 relevant file/line when this syntax is used, so this small addition may have a high
707 relevant file/line when this syntax is used, so this small addition may have a high
683 impact on productivity.
708 impact on productivity.
684
709
685
710
686 Autosuggestions
711 Autosuggestions
687 ~~~~~~~~~~~~~~~
712 ~~~~~~~~~~~~~~~
688
713
689 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>`__.
714 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>`__.
690
715
691 `Ptpython <https://github.com/prompt-toolkit/ptpython#ptpython>`__ allows users to enable this feature in
716 `Ptpython <https://github.com/prompt-toolkit/ptpython#ptpython>`__ allows users to enable this feature in
692 `ptpython/config.py <https://github.com/prompt-toolkit/ptpython/blob/master/examples/ptpython_config/config.py#L90>`__.
717 `ptpython/config.py <https://github.com/prompt-toolkit/ptpython/blob/master/examples/ptpython_config/config.py#L90>`__.
693
718
694 This feature allows users to accept autosuggestions with ctrl e, ctrl f,
719 This feature allows users to accept autosuggestions with ctrl e, ctrl f,
695 or right arrow as described below.
720 or right arrow as described below.
696
721
697 1. Start ipython
722 1. Start ipython
698
723
699 .. image:: ../_images/8.0/auto_suggest_1_prompt_no_text.png
724 .. image:: ../_images/8.0/auto_suggest_1_prompt_no_text.png
700
725
701 2. Run ``print("hello")``
726 2. Run ``print("hello")``
702
727
703 .. image:: ../_images/8.0/auto_suggest_2_print_hello_suggest.png
728 .. image:: ../_images/8.0/auto_suggest_2_print_hello_suggest.png
704
729
705 3. start typing ``print`` again to see the autosuggestion
730 3. start typing ``print`` again to see the autosuggestion
706
731
707 .. image:: ../_images/8.0/auto_suggest_3_print_hello_suggest.png
732 .. image:: ../_images/8.0/auto_suggest_3_print_hello_suggest.png
708
733
709 4. Press ``ctrl-f``, or ``ctrl-e``, or ``right-arrow`` to accept the suggestion
734 4. Press ``ctrl-f``, or ``ctrl-e``, or ``right-arrow`` to accept the suggestion
710
735
711 .. image:: ../_images/8.0/auto_suggest_4_print_hello.png
736 .. image:: ../_images/8.0/auto_suggest_4_print_hello.png
712
737
713 You can also complete word by word:
738 You can also complete word by word:
714
739
715 1. Run ``def say_hello(): print("hello")``
740 1. Run ``def say_hello(): print("hello")``
716
741
717 .. image:: ../_images/8.0/auto_suggest_second_prompt.png
742 .. image:: ../_images/8.0/auto_suggest_second_prompt.png
718
743
719 2. Start typing the first letter if ``def`` to see the autosuggestion
744 2. Start typing the first letter if ``def`` to see the autosuggestion
720
745
721 .. image:: ../_images/8.0/auto_suggest_d_phantom.png
746 .. image:: ../_images/8.0/auto_suggest_d_phantom.png
722
747
723 3. Press ``alt-f`` (or ``escape`` followed by ``f``), to accept the first word of the suggestion
748 3. Press ``alt-f`` (or ``escape`` followed by ``f``), to accept the first word of the suggestion
724
749
725 .. image:: ../_images/8.0/auto_suggest_def_phantom.png
750 .. image:: ../_images/8.0/auto_suggest_def_phantom.png
726
751
727 Importantly, this feature does not interfere with tab completion:
752 Importantly, this feature does not interfere with tab completion:
728
753
729 1. After running ``def say_hello(): print("hello")``, press d
754 1. After running ``def say_hello(): print("hello")``, press d
730
755
731 .. image:: ../_images/8.0/auto_suggest_d_phantom.png
756 .. image:: ../_images/8.0/auto_suggest_d_phantom.png
732
757
733 2. Press Tab to start tab completion
758 2. Press Tab to start tab completion
734
759
735 .. image:: ../_images/8.0/auto_suggest_d_completions.png
760 .. image:: ../_images/8.0/auto_suggest_d_completions.png
736
761
737 3A. Press Tab again to select the first option
762 3A. Press Tab again to select the first option
738
763
739 .. image:: ../_images/8.0/auto_suggest_def_completions.png
764 .. image:: ../_images/8.0/auto_suggest_def_completions.png
740
765
741 3B. Press ``alt f`` (``escape``, ``f``) to accept to accept the first word of the suggestion
766 3B. Press ``alt f`` (``escape``, ``f``) to accept to accept the first word of the suggestion
742
767
743 .. image:: ../_images/8.0/auto_suggest_def_phantom.png
768 .. image:: ../_images/8.0/auto_suggest_def_phantom.png
744
769
745 3C. Press ``ctrl-f`` or ``ctrl-e`` to accept the entire suggestion
770 3C. Press ``ctrl-f`` or ``ctrl-e`` to accept the entire suggestion
746
771
747 .. image:: ../_images/8.0/auto_suggest_match_parens.png
772 .. image:: ../_images/8.0/auto_suggest_match_parens.png
748
773
749
774
750 Currently, autosuggestions are only shown in the emacs or vi insert editing modes:
775 Currently, autosuggestions are only shown in the emacs or vi insert editing modes:
751
776
752 - The ctrl e, ctrl f, and alt f shortcuts work by default in emacs mode.
777 - The ctrl e, ctrl f, and alt f shortcuts work by default in emacs mode.
753 - 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/>`__.
778 - 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/>`__.
754
779
755
780
756 Show pinfo information in ipdb using "?" and "??"
781 Show pinfo information in ipdb using "?" and "??"
757 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
782 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
758
783
759 In IPDB, it is now possible to show the information about an object using "?"
784 In IPDB, it is now possible to show the information about an object using "?"
760 and "??", in much the same way that it can be done when using the IPython prompt::
785 and "??", in much the same way that it can be done when using the IPython prompt::
761
786
762 ipdb> partial?
787 ipdb> partial?
763 Init signature: partial(self, /, *args, **kwargs)
788 Init signature: partial(self, /, *args, **kwargs)
764 Docstring:
789 Docstring:
765 partial(func, *args, **keywords) - new function with partial application
790 partial(func, *args, **keywords) - new function with partial application
766 of the given arguments and keywords.
791 of the given arguments and keywords.
767 File: ~/.pyenv/versions/3.8.6/lib/python3.8/functools.py
792 File: ~/.pyenv/versions/3.8.6/lib/python3.8/functools.py
768 Type: type
793 Type: type
769 Subclasses:
794 Subclasses:
770
795
771 Previously, ``pinfo`` or ``pinfo2`` command had to be used for this purpose.
796 Previously, ``pinfo`` or ``pinfo2`` command had to be used for this purpose.
772
797
773
798
774 Autoreload 3 feature
799 Autoreload 3 feature
775 ~~~~~~~~~~~~~~~~~~~~
800 ~~~~~~~~~~~~~~~~~~~~
776
801
777 Example: When an IPython session is run with the 'autoreload' extension loaded,
802 Example: When an IPython session is run with the 'autoreload' extension loaded,
778 you will now have the option '3' to select, which means the following:
803 you will now have the option '3' to select, which means the following:
779
804
780 1. replicate all functionality from option 2
805 1. replicate all functionality from option 2
781 2. autoload all new funcs/classes/enums/globals from the module when they are added
806 2. autoload all new funcs/classes/enums/globals from the module when they are added
782 3. autoload all newly imported funcs/classes/enums/globals from external modules
807 3. autoload all newly imported funcs/classes/enums/globals from external modules
783
808
784 Try ``%autoreload 3`` in an IPython session after running ``%load_ext autoreload``.
809 Try ``%autoreload 3`` in an IPython session after running ``%load_ext autoreload``.
785
810
786 For more information please see the following unit test : ``extensions/tests/test_autoreload.py:test_autoload_newly_added_objects``
811 For more information please see the following unit test : ``extensions/tests/test_autoreload.py:test_autoload_newly_added_objects``
787
812
788 Auto formatting with black in the CLI
813 Auto formatting with black in the CLI
789 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
814 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
790
815
791 This feature was present in 7.x, but disabled by default.
816 This feature was present in 7.x, but disabled by default.
792
817
793 In 8.0, input was automatically reformatted with Black when black was installed.
818 In 8.0, input was automatically reformatted with Black when black was installed.
794 This feature has been reverted for the time being.
819 This feature has been reverted for the time being.
795 You can re-enable it by setting ``TerminalInteractiveShell.autoformatter`` to ``"black"``
820 You can re-enable it by setting ``TerminalInteractiveShell.autoformatter`` to ``"black"``
796
821
797 History Range Glob feature
822 History Range Glob feature
798 ~~~~~~~~~~~~~~~~~~~~~~~~~~
823 ~~~~~~~~~~~~~~~~~~~~~~~~~~
799
824
800 Previously, when using ``%history``, users could specify either
825 Previously, when using ``%history``, users could specify either
801 a range of sessions and lines, for example:
826 a range of sessions and lines, for example:
802
827
803 .. code-block:: python
828 .. code-block:: python
804
829
805 ~8/1-~6/5 # see history from the first line of 8 sessions ago,
830 ~8/1-~6/5 # see history from the first line of 8 sessions ago,
806 # to the fifth line of 6 sessions ago.``
831 # to the fifth line of 6 sessions ago.``
807
832
808 Or users could specify a glob pattern:
833 Or users could specify a glob pattern:
809
834
810 .. code-block:: python
835 .. code-block:: python
811
836
812 -g <pattern> # glob ALL history for the specified pattern.
837 -g <pattern> # glob ALL history for the specified pattern.
813
838
814 However users could *not* specify both.
839 However users could *not* specify both.
815
840
816 If a user *did* specify both a range and a glob pattern,
841 If a user *did* specify both a range and a glob pattern,
817 then the glob pattern would be used (globbing *all* history) *and the range would be ignored*.
842 then the glob pattern would be used (globbing *all* history) *and the range would be ignored*.
818
843
819 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.
844 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.
820
845
821 Don't start a multi-line cell with sunken parenthesis
846 Don't start a multi-line cell with sunken parenthesis
822 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
847 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
823
848
824 From now on, IPython will not ask for the next line of input when given a single
849 From now on, IPython will not ask for the next line of input when given a single
825 line with more closing than opening brackets. For example, this means that if
850 line with more closing than opening brackets. For example, this means that if
826 you (mis)type ``]]`` instead of ``[]``, a ``SyntaxError`` will show up, instead of
851 you (mis)type ``]]`` instead of ``[]``, a ``SyntaxError`` will show up, instead of
827 the ``...:`` prompt continuation.
852 the ``...:`` prompt continuation.
828
853
829 IPython shell for ipdb interact
854 IPython shell for ipdb interact
830 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
855 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
831
856
832 The ipdb ``interact`` starts an IPython shell instead of Python's built-in ``code.interact()``.
857 The ipdb ``interact`` starts an IPython shell instead of Python's built-in ``code.interact()``.
833
858
834 Automatic Vi prompt stripping
859 Automatic Vi prompt stripping
835 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
860 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
836
861
837 When pasting code into IPython, it will strip the leading prompt characters if
862 When pasting code into IPython, it will strip the leading prompt characters if
838 there are any. For example, you can paste the following code into the console -
863 there are any. For example, you can paste the following code into the console -
839 it will still work, even though each line is prefixed with prompts (``In``,
864 it will still work, even though each line is prefixed with prompts (``In``,
840 ``Out``)::
865 ``Out``)::
841
866
842 In [1]: 2 * 2 == 4
867 In [1]: 2 * 2 == 4
843 Out[1]: True
868 Out[1]: True
844
869
845 In [2]: print("This still works as pasted")
870 In [2]: print("This still works as pasted")
846
871
847
872
848 Previously, this was not the case for the Vi-mode prompts::
873 Previously, this was not the case for the Vi-mode prompts::
849
874
850 In [1]: [ins] In [13]: 2 * 2 == 4
875 In [1]: [ins] In [13]: 2 * 2 == 4
851 ...: Out[13]: True
876 ...: Out[13]: True
852 ...:
877 ...:
853 File "<ipython-input-1-727bb88eaf33>", line 1
878 File "<ipython-input-1-727bb88eaf33>", line 1
854 [ins] In [13]: 2 * 2 == 4
879 [ins] In [13]: 2 * 2 == 4
855 ^
880 ^
856 SyntaxError: invalid syntax
881 SyntaxError: invalid syntax
857
882
858 This is now fixed, and Vi prompt prefixes - ``[ins]`` and ``[nav]`` - are
883 This is now fixed, and Vi prompt prefixes - ``[ins]`` and ``[nav]`` - are
859 skipped just as the normal ``In`` would be.
884 skipped just as the normal ``In`` would be.
860
885
861 IPython shell can be started in the Vi mode using ``ipython --TerminalInteractiveShell.editing_mode=vi``,
886 IPython shell can be started in the Vi mode using ``ipython --TerminalInteractiveShell.editing_mode=vi``,
862 You should be able to change mode dynamically with ``%config TerminalInteractiveShell.editing_mode='vi'``
887 You should be able to change mode dynamically with ``%config TerminalInteractiveShell.editing_mode='vi'``
863
888
864 Empty History Ranges
889 Empty History Ranges
865 ~~~~~~~~~~~~~~~~~~~~
890 ~~~~~~~~~~~~~~~~~~~~
866
891
867 A number of magics that take history ranges can now be used with an empty
892 A number of magics that take history ranges can now be used with an empty
868 range. These magics are:
893 range. These magics are:
869
894
870 * ``%save``
895 * ``%save``
871 * ``%load``
896 * ``%load``
872 * ``%pastebin``
897 * ``%pastebin``
873 * ``%pycat``
898 * ``%pycat``
874
899
875 Using them this way will make them take the history of the current session up
900 Using them this way will make them take the history of the current session up
876 to the point of the magic call (such that the magic itself will not be
901 to the point of the magic call (such that the magic itself will not be
877 included).
902 included).
878
903
879 Therefore it is now possible to save the whole history to a file using
904 Therefore it is now possible to save the whole history to a file using
880 ``%save <filename>``, load and edit it using ``%load`` (makes for a nice usage
905 ``%save <filename>``, load and edit it using ``%load`` (makes for a nice usage
881 when followed with :kbd:`F2`), send it to `dpaste.org <http://dpast.org>`_ using
906 when followed with :kbd:`F2`), send it to `dpaste.org <http://dpast.org>`_ using
882 ``%pastebin``, or view the whole thing syntax-highlighted with a single
907 ``%pastebin``, or view the whole thing syntax-highlighted with a single
883 ``%pycat``.
908 ``%pycat``.
884
909
885
910
886 Windows timing implementation: Switch to process_time
911 Windows timing implementation: Switch to process_time
887 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
912 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
888 Timing on Windows, for example with ``%%time``, was changed from being based on ``time.perf_counter``
913 Timing on Windows, for example with ``%%time``, was changed from being based on ``time.perf_counter``
889 (which counted time even when the process was sleeping) to being based on ``time.process_time`` instead
914 (which counted time even when the process was sleeping) to being based on ``time.process_time`` instead
890 (which only counts CPU time). This brings it closer to the behavior on Linux. See :ghpull:`12984`.
915 (which only counts CPU time). This brings it closer to the behavior on Linux. See :ghpull:`12984`.
891
916
892 Miscellaneous
917 Miscellaneous
893 ~~~~~~~~~~~~~
918 ~~~~~~~~~~~~~
894 - Non-text formatters are not disabled in the terminal, which should simplify
919 - Non-text formatters are not disabled in the terminal, which should simplify
895 writing extensions displaying images or other mimetypes in supporting terminals.
920 writing extensions displaying images or other mimetypes in supporting terminals.
896 :ghpull:`12315`
921 :ghpull:`12315`
897 - It is now possible to automatically insert matching brackets in Terminal IPython using the
922 - It is now possible to automatically insert matching brackets in Terminal IPython using the
898 ``TerminalInteractiveShell.auto_match=True`` option. :ghpull:`12586`
923 ``TerminalInteractiveShell.auto_match=True`` option. :ghpull:`12586`
899 - We are thinking of deprecating the current ``%%javascript`` magic in favor of a better replacement. See :ghpull:`13376`.
924 - We are thinking of deprecating the current ``%%javascript`` magic in favor of a better replacement. See :ghpull:`13376`.
900 - ``~`` is now expanded when part of a path in most magics :ghpull:`13385`
925 - ``~`` is now expanded when part of a path in most magics :ghpull:`13385`
901 - ``%/%%timeit`` magic now adds a comma every thousands to make reading a long number easier :ghpull:`13379`
926 - ``%/%%timeit`` magic now adds a comma every thousands to make reading a long number easier :ghpull:`13379`
902 - ``"info"`` messages can now be customised to hide some fields :ghpull:`13343`
927 - ``"info"`` messages can now be customised to hide some fields :ghpull:`13343`
903 - ``collections.UserList`` now pretty-prints :ghpull:`13320`
928 - ``collections.UserList`` now pretty-prints :ghpull:`13320`
904 - The debugger now has a persistent history, which should make it less
929 - The debugger now has a persistent history, which should make it less
905 annoying to retype commands :ghpull:`13246`
930 annoying to retype commands :ghpull:`13246`
906 - ``!pip`` ``!conda`` ``!cd`` or ``!ls`` are likely doing the wrong thing. We
931 - ``!pip`` ``!conda`` ``!cd`` or ``!ls`` are likely doing the wrong thing. We
907 now warn users if they use one of those commands. :ghpull:`12954`
932 now warn users if they use one of those commands. :ghpull:`12954`
908 - Make ``%precision`` work for ``numpy.float64`` type :ghpull:`12902`
933 - Make ``%precision`` work for ``numpy.float64`` type :ghpull:`12902`
909
934
910 Re-added support for XDG config directories
935 Re-added support for XDG config directories
911 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
936 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
912
937
913 XDG support through the years comes and goes. There is a tension between having
938 XDG support through the years comes and goes. There is a tension between having
914 an identical location for configuration in all platforms versus having simple instructions.
939 an identical location for configuration in all platforms versus having simple instructions.
915 After initial failures a couple of years ago, IPython was modified to automatically migrate XDG
940 After initial failures a couple of years ago, IPython was modified to automatically migrate XDG
916 config files back into ``~/.ipython``. That migration code has now been removed.
941 config files back into ``~/.ipython``. That migration code has now been removed.
917 IPython now checks the XDG locations, so if you _manually_ move your config
942 IPython now checks the XDG locations, so if you _manually_ move your config
918 files to your preferred location, IPython will not move them back.
943 files to your preferred location, IPython will not move them back.
919
944
920
945
921 Preparing for Python 3.10
946 Preparing for Python 3.10
922 -------------------------
947 -------------------------
923
948
924 To prepare for Python 3.10, we have started working on removing reliance and
949 To prepare for Python 3.10, we have started working on removing reliance and
925 any dependency that is not compatible with Python 3.10. This includes migrating our
950 any dependency that is not compatible with Python 3.10. This includes migrating our
926 test suite to pytest and starting to remove nose. This also means that the
951 test suite to pytest and starting to remove nose. This also means that the
927 ``iptest`` command is now gone and all testing is via pytest.
952 ``iptest`` command is now gone and all testing is via pytest.
928
953
929 This was in large part thanks to the NumFOCUS Small Developer grant, which enabled us to
954 This was in large part thanks to the NumFOCUS Small Developer grant, which enabled us to
930 allocate \$4000 to hire `Nikita Kniazev (@Kojoley) <https://github.com/Kojoley>`_,
955 allocate \$4000 to hire `Nikita Kniazev (@Kojoley) <https://github.com/Kojoley>`_,
931 who did a fantastic job at updating our code base, migrating to pytest, pushing
956 who did a fantastic job at updating our code base, migrating to pytest, pushing
932 our coverage, and fixing a large number of bugs. I highly recommend contacting
957 our coverage, and fixing a large number of bugs. I highly recommend contacting
933 them if you need help with C++ and Python projects.
958 them if you need help with C++ and Python projects.
934
959
935 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+>`__
960 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+>`__
936
961
937 Removing support for older Python versions
962 Removing support for older Python versions
938 ------------------------------------------
963 ------------------------------------------
939
964
940
965
941 We are removing support for Python up through 3.7, allowing internal code to use the more
966 We are removing support for Python up through 3.7, allowing internal code to use the more
942 efficient ``pathlib`` and to make better use of type annotations.
967 efficient ``pathlib`` and to make better use of type annotations.
943
968
944 .. image:: ../_images/8.0/pathlib_pathlib_everywhere.jpg
969 .. image:: ../_images/8.0/pathlib_pathlib_everywhere.jpg
945 :alt: "Meme image of Toy Story with Woody and Buzz, with the text 'pathlib, pathlib everywhere'"
970 :alt: "Meme image of Toy Story with Woody and Buzz, with the text 'pathlib, pathlib everywhere'"
946
971
947
972
948 We had about 34 PRs only to update some logic to update some functions from managing strings to
973 We had about 34 PRs only to update some logic to update some functions from managing strings to
949 using Pathlib.
974 using Pathlib.
950
975
951 The completer has also seen significant updates and now makes use of newer Jedi APIs,
976 The completer has also seen significant updates and now makes use of newer Jedi APIs,
952 offering faster and more reliable tab completion.
977 offering faster and more reliable tab completion.
953
978
954 Misc Statistics
979 Misc Statistics
955 ---------------
980 ---------------
956
981
957 Here are some numbers::
982 Here are some numbers::
958
983
959 7.x: 296 files, 12561 blank lines, 20282 comments, 35142 line of code.
984 7.x: 296 files, 12561 blank lines, 20282 comments, 35142 line of code.
960 8.0: 252 files, 12053 blank lines, 19232 comments, 34505 line of code.
985 8.0: 252 files, 12053 blank lines, 19232 comments, 34505 line of code.
961
986
962 $ git diff --stat 7.x...master | tail -1
987 $ git diff --stat 7.x...master | tail -1
963 340 files changed, 13399 insertions(+), 12421 deletions(-)
988 340 files changed, 13399 insertions(+), 12421 deletions(-)
964
989
965 We have commits from 162 authors, who contributed 1916 commits in 23 month, excluding merges (to not bias toward
990 We have commits from 162 authors, who contributed 1916 commits in 23 month, excluding merges (to not bias toward
966 maintainers pushing buttons).::
991 maintainers pushing buttons).::
967
992
968 $ git shortlog -s --no-merges 7.x...master | sort -nr
993 $ git shortlog -s --no-merges 7.x...master | sort -nr
969 535 Matthias Bussonnier
994 535 Matthias Bussonnier
970 86 Nikita Kniazev
995 86 Nikita Kniazev
971 69 Blazej Michalik
996 69 Blazej Michalik
972 49 Samuel Gaist
997 49 Samuel Gaist
973 27 Itamar Turner-Trauring
998 27 Itamar Turner-Trauring
974 18 Spas Kalaydzhisyki
999 18 Spas Kalaydzhisyki
975 17 Thomas Kluyver
1000 17 Thomas Kluyver
976 17 Quentin Peter
1001 17 Quentin Peter
977 17 James Morris
1002 17 James Morris
978 17 Artur Svistunov
1003 17 Artur Svistunov
979 15 Bart Skowron
1004 15 Bart Skowron
980 14 Alex Hall
1005 14 Alex Hall
981 13 rushabh-v
1006 13 rushabh-v
982 13 Terry Davis
1007 13 Terry Davis
983 13 Benjamin Ragan-Kelley
1008 13 Benjamin Ragan-Kelley
984 8 martinRenou
1009 8 martinRenou
985 8 farisachugthai
1010 8 farisachugthai
986 7 dswij
1011 7 dswij
987 7 Gal B
1012 7 Gal B
988 7 Corentin Cadiou
1013 7 Corentin Cadiou
989 6 yuji96
1014 6 yuji96
990 6 Martin Skarzynski
1015 6 Martin Skarzynski
991 6 Justin Palmer
1016 6 Justin Palmer
992 6 Daniel Goldfarb
1017 6 Daniel Goldfarb
993 6 Ben Greiner
1018 6 Ben Greiner
994 5 Sammy Al Hashemi
1019 5 Sammy Al Hashemi
995 5 Paul Ivanov
1020 5 Paul Ivanov
996 5 Inception95
1021 5 Inception95
997 5 Eyenpi
1022 5 Eyenpi
998 5 Douglas Blank
1023 5 Douglas Blank
999 5 Coco Mishra
1024 5 Coco Mishra
1000 5 Bibo Hao
1025 5 Bibo Hao
1001 5 AndrΓ© A. Gomes
1026 5 AndrΓ© A. Gomes
1002 5 Ahmed Fasih
1027 5 Ahmed Fasih
1003 4 takuya fujiwara
1028 4 takuya fujiwara
1004 4 palewire
1029 4 palewire
1005 4 Thomas A Caswell
1030 4 Thomas A Caswell
1006 4 Talley Lambert
1031 4 Talley Lambert
1007 4 Scott Sanderson
1032 4 Scott Sanderson
1008 4 Ram Rachum
1033 4 Ram Rachum
1009 4 Nick Muoh
1034 4 Nick Muoh
1010 4 Nathan Goldbaum
1035 4 Nathan Goldbaum
1011 4 Mithil Poojary
1036 4 Mithil Poojary
1012 4 Michael T
1037 4 Michael T
1013 4 Jakub Klus
1038 4 Jakub Klus
1014 4 Ian Castleden
1039 4 Ian Castleden
1015 4 Eli Rykoff
1040 4 Eli Rykoff
1016 4 Ashwin Vishnu
1041 4 Ashwin Vishnu
1017 3 谭九鼎
1042 3 谭九鼎
1018 3 sleeping
1043 3 sleeping
1019 3 Sylvain Corlay
1044 3 Sylvain Corlay
1020 3 Peter Corke
1045 3 Peter Corke
1021 3 Paul Bissex
1046 3 Paul Bissex
1022 3 Matthew Feickert
1047 3 Matthew Feickert
1023 3 Fernando Perez
1048 3 Fernando Perez
1024 3 Eric Wieser
1049 3 Eric Wieser
1025 3 Daniel Mietchen
1050 3 Daniel Mietchen
1026 3 Aditya Sathe
1051 3 Aditya Sathe
1027 3 007vedant
1052 3 007vedant
1028 2 rchiodo
1053 2 rchiodo
1029 2 nicolaslazo
1054 2 nicolaslazo
1030 2 luttik
1055 2 luttik
1031 2 gorogoroumaru
1056 2 gorogoroumaru
1032 2 foobarbyte
1057 2 foobarbyte
1033 2 bar-hen
1058 2 bar-hen
1034 2 Theo Ouzhinski
1059 2 Theo Ouzhinski
1035 2 Strawkage
1060 2 Strawkage
1036 2 Samreen Zarroug
1061 2 Samreen Zarroug
1037 2 Pete Blois
1062 2 Pete Blois
1038 2 Meysam Azad
1063 2 Meysam Azad
1039 2 Matthieu Ancellin
1064 2 Matthieu Ancellin
1040 2 Mark Schmitz
1065 2 Mark Schmitz
1041 2 Maor Kleinberger
1066 2 Maor Kleinberger
1042 2 MRCWirtz
1067 2 MRCWirtz
1043 2 Lumir Balhar
1068 2 Lumir Balhar
1044 2 Julien Rabinow
1069 2 Julien Rabinow
1045 2 Juan Luis Cano RodrΓ­guez
1070 2 Juan Luis Cano RodrΓ­guez
1046 2 Joyce Er
1071 2 Joyce Er
1047 2 Jakub
1072 2 Jakub
1048 2 Faris A Chugthai
1073 2 Faris A Chugthai
1049 2 Ethan Madden
1074 2 Ethan Madden
1050 2 Dimitri Papadopoulos
1075 2 Dimitri Papadopoulos
1051 2 Diego Fernandez
1076 2 Diego Fernandez
1052 2 Daniel Shimon
1077 2 Daniel Shimon
1053 2 Coco Bennett
1078 2 Coco Bennett
1054 2 Carlos Cordoba
1079 2 Carlos Cordoba
1055 2 Boyuan Liu
1080 2 Boyuan Liu
1056 2 BaoGiang HoangVu
1081 2 BaoGiang HoangVu
1057 2 Augusto
1082 2 Augusto
1058 2 Arthur Svistunov
1083 2 Arthur Svistunov
1059 2 Arthur Moreira
1084 2 Arthur Moreira
1060 2 Ali Nabipour
1085 2 Ali Nabipour
1061 2 Adam Hackbarth
1086 2 Adam Hackbarth
1062 1 richard
1087 1 richard
1063 1 linar-jether
1088 1 linar-jether
1064 1 lbennett
1089 1 lbennett
1065 1 juacrumar
1090 1 juacrumar
1066 1 gpotter2
1091 1 gpotter2
1067 1 digitalvirtuoso
1092 1 digitalvirtuoso
1068 1 dalthviz
1093 1 dalthviz
1069 1 Yonatan Goldschmidt
1094 1 Yonatan Goldschmidt
1070 1 Tomasz KΕ‚oczko
1095 1 Tomasz KΕ‚oczko
1071 1 Tobias Bengfort
1096 1 Tobias Bengfort
1072 1 Timur Kushukov
1097 1 Timur Kushukov
1073 1 Thomas
1098 1 Thomas
1074 1 Snir Broshi
1099 1 Snir Broshi
1075 1 Shao Yang Hong
1100 1 Shao Yang Hong
1076 1 Sanjana-03
1101 1 Sanjana-03
1077 1 Romulo Filho
1102 1 Romulo Filho
1078 1 Rodolfo Carvalho
1103 1 Rodolfo Carvalho
1079 1 Richard Shadrach
1104 1 Richard Shadrach
1080 1 Reilly Tucker Siemens
1105 1 Reilly Tucker Siemens
1081 1 Rakessh Roshan
1106 1 Rakessh Roshan
1082 1 Piers Titus van der Torren
1107 1 Piers Titus van der Torren
1083 1 PhanatosZou
1108 1 PhanatosZou
1084 1 Pavel Safronov
1109 1 Pavel Safronov
1085 1 Paulo S. Costa
1110 1 Paulo S. Costa
1086 1 Paul McCarthy
1111 1 Paul McCarthy
1087 1 NotWearingPants
1112 1 NotWearingPants
1088 1 Naelson Douglas
1113 1 Naelson Douglas
1089 1 Michael Tiemann
1114 1 Michael Tiemann
1090 1 Matt Wozniski
1115 1 Matt Wozniski
1091 1 Markus Wageringel
1116 1 Markus Wageringel
1092 1 Marcus Wirtz
1117 1 Marcus Wirtz
1093 1 Marcio Mazza
1118 1 Marcio Mazza
1094 1 LumΓ­r 'Frenzy' Balhar
1119 1 LumΓ­r 'Frenzy' Balhar
1095 1 Lightyagami1
1120 1 Lightyagami1
1096 1 Leon Anavi
1121 1 Leon Anavi
1097 1 LeafyLi
1122 1 LeafyLi
1098 1 L0uisJ0shua
1123 1 L0uisJ0shua
1099 1 Kyle Cutler
1124 1 Kyle Cutler
1100 1 Krzysztof Cybulski
1125 1 Krzysztof Cybulski
1101 1 Kevin Kirsche
1126 1 Kevin Kirsche
1102 1 KIU Shueng Chuan
1127 1 KIU Shueng Chuan
1103 1 Jonathan Slenders
1128 1 Jonathan Slenders
1104 1 Jay Qi
1129 1 Jay Qi
1105 1 Jake VanderPlas
1130 1 Jake VanderPlas
1106 1 Iwan Briquemont
1131 1 Iwan Briquemont
1107 1 Hussaina Begum Nandyala
1132 1 Hussaina Begum Nandyala
1108 1 Gordon Ball
1133 1 Gordon Ball
1109 1 Gabriel Simonetto
1134 1 Gabriel Simonetto
1110 1 Frank Tobia
1135 1 Frank Tobia
1111 1 Erik
1136 1 Erik
1112 1 Elliott Sales de Andrade
1137 1 Elliott Sales de Andrade
1113 1 Daniel Hahler
1138 1 Daniel Hahler
1114 1 Dan Green-Leipciger
1139 1 Dan Green-Leipciger
1115 1 Dan Green
1140 1 Dan Green
1116 1 Damian Yurzola
1141 1 Damian Yurzola
1117 1 Coon, Ethan T
1142 1 Coon, Ethan T
1118 1 Carol Willing
1143 1 Carol Willing
1119 1 Brian Lee
1144 1 Brian Lee
1120 1 Brendan Gerrity
1145 1 Brendan Gerrity
1121 1 Blake Griffin
1146 1 Blake Griffin
1122 1 Bastian Ebeling
1147 1 Bastian Ebeling
1123 1 Bartosz Telenczuk
1148 1 Bartosz Telenczuk
1124 1 Ankitsingh6299
1149 1 Ankitsingh6299
1125 1 Andrew Port
1150 1 Andrew Port
1126 1 Andrew J. Hesford
1151 1 Andrew J. Hesford
1127 1 Albert Zhang
1152 1 Albert Zhang
1128 1 Adam Johnson
1153 1 Adam Johnson
1129
1154
1130 This does not, of course, represent non-code contributions, for which we are also grateful.
1155 This does not, of course, represent non-code contributions, for which we are also grateful.
1131
1156
1132
1157
1133 API Changes using Frappuccino
1158 API Changes using Frappuccino
1134 -----------------------------
1159 -----------------------------
1135
1160
1136 This is an experimental exhaustive API difference using `Frappuccino <https://pypi.org/project/frappuccino/>`_
1161 This is an experimental exhaustive API difference using `Frappuccino <https://pypi.org/project/frappuccino/>`_
1137
1162
1138
1163
1139 The following items are new in IPython 8.0 ::
1164 The following items are new in IPython 8.0 ::
1140
1165
1141 + IPython.core.async_helpers.get_asyncio_loop()
1166 + IPython.core.async_helpers.get_asyncio_loop()
1142 + IPython.core.completer.Dict
1167 + IPython.core.completer.Dict
1143 + IPython.core.completer.Pattern
1168 + IPython.core.completer.Pattern
1144 + IPython.core.completer.Sequence
1169 + IPython.core.completer.Sequence
1145 + IPython.core.completer.__skip_doctest__
1170 + IPython.core.completer.__skip_doctest__
1146 + IPython.core.debugger.Pdb.precmd(self, line)
1171 + IPython.core.debugger.Pdb.precmd(self, line)
1147 + IPython.core.debugger.__skip_doctest__
1172 + IPython.core.debugger.__skip_doctest__
1148 + IPython.core.display.__getattr__(name)
1173 + IPython.core.display.__getattr__(name)
1149 + IPython.core.display.warn
1174 + IPython.core.display.warn
1150 + IPython.core.display_functions
1175 + IPython.core.display_functions
1151 + IPython.core.display_functions.DisplayHandle
1176 + IPython.core.display_functions.DisplayHandle
1152 + IPython.core.display_functions.DisplayHandle.display(self, obj, **kwargs)
1177 + IPython.core.display_functions.DisplayHandle.display(self, obj, **kwargs)
1153 + IPython.core.display_functions.DisplayHandle.update(self, obj, **kwargs)
1178 + IPython.core.display_functions.DisplayHandle.update(self, obj, **kwargs)
1154 + IPython.core.display_functions.__all__
1179 + IPython.core.display_functions.__all__
1155 + IPython.core.display_functions.__builtins__
1180 + IPython.core.display_functions.__builtins__
1156 + IPython.core.display_functions.__cached__
1181 + IPython.core.display_functions.__cached__
1157 + IPython.core.display_functions.__doc__
1182 + IPython.core.display_functions.__doc__
1158 + IPython.core.display_functions.__file__
1183 + IPython.core.display_functions.__file__
1159 + IPython.core.display_functions.__loader__
1184 + IPython.core.display_functions.__loader__
1160 + IPython.core.display_functions.__name__
1185 + IPython.core.display_functions.__name__
1161 + IPython.core.display_functions.__package__
1186 + IPython.core.display_functions.__package__
1162 + IPython.core.display_functions.__spec__
1187 + IPython.core.display_functions.__spec__
1163 + IPython.core.display_functions.b2a_hex
1188 + IPython.core.display_functions.b2a_hex
1164 + IPython.core.display_functions.clear_output(wait=False)
1189 + IPython.core.display_functions.clear_output(wait=False)
1165 + IPython.core.display_functions.display(*objs, include='None', exclude='None', metadata='None', transient='None', display_id='None', raw=False, clear=False, **kwargs)
1190 + IPython.core.display_functions.display(*objs, include='None', exclude='None', metadata='None', transient='None', display_id='None', raw=False, clear=False, **kwargs)
1166 + IPython.core.display_functions.publish_display_data(data, metadata='None', source='<deprecated>', *, transient='None', **kwargs)
1191 + IPython.core.display_functions.publish_display_data(data, metadata='None', source='<deprecated>', *, transient='None', **kwargs)
1167 + IPython.core.display_functions.update_display(obj, *, display_id, **kwargs)
1192 + IPython.core.display_functions.update_display(obj, *, display_id, **kwargs)
1168 + IPython.core.extensions.BUILTINS_EXTS
1193 + IPython.core.extensions.BUILTINS_EXTS
1169 + IPython.core.inputtransformer2.has_sunken_brackets(tokens)
1194 + IPython.core.inputtransformer2.has_sunken_brackets(tokens)
1170 + IPython.core.interactiveshell.Callable
1195 + IPython.core.interactiveshell.Callable
1171 + IPython.core.interactiveshell.__annotations__
1196 + IPython.core.interactiveshell.__annotations__
1172 + IPython.core.ultratb.List
1197 + IPython.core.ultratb.List
1173 + IPython.core.ultratb.Tuple
1198 + IPython.core.ultratb.Tuple
1174 + IPython.lib.pretty.CallExpression
1199 + IPython.lib.pretty.CallExpression
1175 + IPython.lib.pretty.CallExpression.factory(name)
1200 + IPython.lib.pretty.CallExpression.factory(name)
1176 + IPython.lib.pretty.RawStringLiteral
1201 + IPython.lib.pretty.RawStringLiteral
1177 + IPython.lib.pretty.RawText
1202 + IPython.lib.pretty.RawText
1178 + IPython.terminal.debugger.TerminalPdb.do_interact(self, arg)
1203 + IPython.terminal.debugger.TerminalPdb.do_interact(self, arg)
1179 + IPython.terminal.embed.Set
1204 + IPython.terminal.embed.Set
1180
1205
1181 The following items have been removed (or moved to superclass)::
1206 The following items have been removed (or moved to superclass)::
1182
1207
1183 - IPython.core.application.BaseIPythonApplication.initialize_subcommand
1208 - IPython.core.application.BaseIPythonApplication.initialize_subcommand
1184 - IPython.core.completer.Sentinel
1209 - IPython.core.completer.Sentinel
1185 - IPython.core.completer.skip_doctest
1210 - IPython.core.completer.skip_doctest
1186 - IPython.core.debugger.Tracer
1211 - IPython.core.debugger.Tracer
1187 - IPython.core.display.DisplayHandle
1212 - IPython.core.display.DisplayHandle
1188 - IPython.core.display.DisplayHandle.display
1213 - IPython.core.display.DisplayHandle.display
1189 - IPython.core.display.DisplayHandle.update
1214 - IPython.core.display.DisplayHandle.update
1190 - IPython.core.display.b2a_hex
1215 - IPython.core.display.b2a_hex
1191 - IPython.core.display.clear_output
1216 - IPython.core.display.clear_output
1192 - IPython.core.display.display
1217 - IPython.core.display.display
1193 - IPython.core.display.publish_display_data
1218 - IPython.core.display.publish_display_data
1194 - IPython.core.display.update_display
1219 - IPython.core.display.update_display
1195 - IPython.core.excolors.Deprec
1220 - IPython.core.excolors.Deprec
1196 - IPython.core.excolors.ExceptionColors
1221 - IPython.core.excolors.ExceptionColors
1197 - IPython.core.history.warn
1222 - IPython.core.history.warn
1198 - IPython.core.hooks.late_startup_hook
1223 - IPython.core.hooks.late_startup_hook
1199 - IPython.core.hooks.pre_run_code_hook
1224 - IPython.core.hooks.pre_run_code_hook
1200 - IPython.core.hooks.shutdown_hook
1225 - IPython.core.hooks.shutdown_hook
1201 - IPython.core.interactiveshell.InteractiveShell.init_deprecation_warnings
1226 - IPython.core.interactiveshell.InteractiveShell.init_deprecation_warnings
1202 - IPython.core.interactiveshell.InteractiveShell.init_readline
1227 - IPython.core.interactiveshell.InteractiveShell.init_readline
1203 - IPython.core.interactiveshell.InteractiveShell.write
1228 - IPython.core.interactiveshell.InteractiveShell.write
1204 - IPython.core.interactiveshell.InteractiveShell.write_err
1229 - IPython.core.interactiveshell.InteractiveShell.write_err
1205 - IPython.core.interactiveshell.get_default_colors
1230 - IPython.core.interactiveshell.get_default_colors
1206 - IPython.core.interactiveshell.removed_co_newlocals
1231 - IPython.core.interactiveshell.removed_co_newlocals
1207 - IPython.core.magics.execution.ExecutionMagics.profile_missing_notice
1232 - IPython.core.magics.execution.ExecutionMagics.profile_missing_notice
1208 - IPython.core.magics.script.PIPE
1233 - IPython.core.magics.script.PIPE
1209 - IPython.core.prefilter.PrefilterManager.init_transformers
1234 - IPython.core.prefilter.PrefilterManager.init_transformers
1210 - IPython.core.release.classifiers
1235 - IPython.core.release.classifiers
1211 - IPython.core.release.description
1236 - IPython.core.release.description
1212 - IPython.core.release.keywords
1237 - IPython.core.release.keywords
1213 - IPython.core.release.long_description
1238 - IPython.core.release.long_description
1214 - IPython.core.release.name
1239 - IPython.core.release.name
1215 - IPython.core.release.platforms
1240 - IPython.core.release.platforms
1216 - IPython.core.release.url
1241 - IPython.core.release.url
1217 - IPython.core.ultratb.VerboseTB.format_records
1242 - IPython.core.ultratb.VerboseTB.format_records
1218 - IPython.core.ultratb.find_recursion
1243 - IPython.core.ultratb.find_recursion
1219 - IPython.core.ultratb.findsource
1244 - IPython.core.ultratb.findsource
1220 - IPython.core.ultratb.fix_frame_records_filenames
1245 - IPython.core.ultratb.fix_frame_records_filenames
1221 - IPython.core.ultratb.inspect_error
1246 - IPython.core.ultratb.inspect_error
1222 - IPython.core.ultratb.is_recursion_error
1247 - IPython.core.ultratb.is_recursion_error
1223 - IPython.core.ultratb.with_patch_inspect
1248 - IPython.core.ultratb.with_patch_inspect
1224 - IPython.external.__all__
1249 - IPython.external.__all__
1225 - IPython.external.__builtins__
1250 - IPython.external.__builtins__
1226 - IPython.external.__cached__
1251 - IPython.external.__cached__
1227 - IPython.external.__doc__
1252 - IPython.external.__doc__
1228 - IPython.external.__file__
1253 - IPython.external.__file__
1229 - IPython.external.__loader__
1254 - IPython.external.__loader__
1230 - IPython.external.__name__
1255 - IPython.external.__name__
1231 - IPython.external.__package__
1256 - IPython.external.__package__
1232 - IPython.external.__path__
1257 - IPython.external.__path__
1233 - IPython.external.__spec__
1258 - IPython.external.__spec__
1234 - IPython.kernel.KernelConnectionInfo
1259 - IPython.kernel.KernelConnectionInfo
1235 - IPython.kernel.__builtins__
1260 - IPython.kernel.__builtins__
1236 - IPython.kernel.__cached__
1261 - IPython.kernel.__cached__
1237 - IPython.kernel.__warningregistry__
1262 - IPython.kernel.__warningregistry__
1238 - IPython.kernel.pkg
1263 - IPython.kernel.pkg
1239 - IPython.kernel.protocol_version
1264 - IPython.kernel.protocol_version
1240 - IPython.kernel.protocol_version_info
1265 - IPython.kernel.protocol_version_info
1241 - IPython.kernel.src
1266 - IPython.kernel.src
1242 - IPython.kernel.version_info
1267 - IPython.kernel.version_info
1243 - IPython.kernel.warn
1268 - IPython.kernel.warn
1244 - IPython.lib.backgroundjobs
1269 - IPython.lib.backgroundjobs
1245 - IPython.lib.backgroundjobs.BackgroundJobBase
1270 - IPython.lib.backgroundjobs.BackgroundJobBase
1246 - IPython.lib.backgroundjobs.BackgroundJobBase.run
1271 - IPython.lib.backgroundjobs.BackgroundJobBase.run
1247 - IPython.lib.backgroundjobs.BackgroundJobBase.traceback
1272 - IPython.lib.backgroundjobs.BackgroundJobBase.traceback
1248 - IPython.lib.backgroundjobs.BackgroundJobExpr
1273 - IPython.lib.backgroundjobs.BackgroundJobExpr
1249 - IPython.lib.backgroundjobs.BackgroundJobExpr.call
1274 - IPython.lib.backgroundjobs.BackgroundJobExpr.call
1250 - IPython.lib.backgroundjobs.BackgroundJobFunc
1275 - IPython.lib.backgroundjobs.BackgroundJobFunc
1251 - IPython.lib.backgroundjobs.BackgroundJobFunc.call
1276 - IPython.lib.backgroundjobs.BackgroundJobFunc.call
1252 - IPython.lib.backgroundjobs.BackgroundJobManager
1277 - IPython.lib.backgroundjobs.BackgroundJobManager
1253 - IPython.lib.backgroundjobs.BackgroundJobManager.flush
1278 - IPython.lib.backgroundjobs.BackgroundJobManager.flush
1254 - IPython.lib.backgroundjobs.BackgroundJobManager.new
1279 - IPython.lib.backgroundjobs.BackgroundJobManager.new
1255 - IPython.lib.backgroundjobs.BackgroundJobManager.remove
1280 - IPython.lib.backgroundjobs.BackgroundJobManager.remove
1256 - IPython.lib.backgroundjobs.BackgroundJobManager.result
1281 - IPython.lib.backgroundjobs.BackgroundJobManager.result
1257 - IPython.lib.backgroundjobs.BackgroundJobManager.status
1282 - IPython.lib.backgroundjobs.BackgroundJobManager.status
1258 - IPython.lib.backgroundjobs.BackgroundJobManager.traceback
1283 - IPython.lib.backgroundjobs.BackgroundJobManager.traceback
1259 - IPython.lib.backgroundjobs.__builtins__
1284 - IPython.lib.backgroundjobs.__builtins__
1260 - IPython.lib.backgroundjobs.__cached__
1285 - IPython.lib.backgroundjobs.__cached__
1261 - IPython.lib.backgroundjobs.__doc__
1286 - IPython.lib.backgroundjobs.__doc__
1262 - IPython.lib.backgroundjobs.__file__
1287 - IPython.lib.backgroundjobs.__file__
1263 - IPython.lib.backgroundjobs.__loader__
1288 - IPython.lib.backgroundjobs.__loader__
1264 - IPython.lib.backgroundjobs.__name__
1289 - IPython.lib.backgroundjobs.__name__
1265 - IPython.lib.backgroundjobs.__package__
1290 - IPython.lib.backgroundjobs.__package__
1266 - IPython.lib.backgroundjobs.__spec__
1291 - IPython.lib.backgroundjobs.__spec__
1267 - IPython.lib.kernel.__builtins__
1292 - IPython.lib.kernel.__builtins__
1268 - IPython.lib.kernel.__cached__
1293 - IPython.lib.kernel.__cached__
1269 - IPython.lib.kernel.__doc__
1294 - IPython.lib.kernel.__doc__
1270 - IPython.lib.kernel.__file__
1295 - IPython.lib.kernel.__file__
1271 - IPython.lib.kernel.__loader__
1296 - IPython.lib.kernel.__loader__
1272 - IPython.lib.kernel.__name__
1297 - IPython.lib.kernel.__name__
1273 - IPython.lib.kernel.__package__
1298 - IPython.lib.kernel.__package__
1274 - IPython.lib.kernel.__spec__
1299 - IPython.lib.kernel.__spec__
1275 - IPython.lib.kernel.__warningregistry__
1300 - IPython.lib.kernel.__warningregistry__
1276 - IPython.paths.fs_encoding
1301 - IPython.paths.fs_encoding
1277 - IPython.terminal.debugger.DEFAULT_BUFFER
1302 - IPython.terminal.debugger.DEFAULT_BUFFER
1278 - IPython.terminal.debugger.cursor_in_leading_ws
1303 - IPython.terminal.debugger.cursor_in_leading_ws
1279 - IPython.terminal.debugger.emacs_insert_mode
1304 - IPython.terminal.debugger.emacs_insert_mode
1280 - IPython.terminal.debugger.has_selection
1305 - IPython.terminal.debugger.has_selection
1281 - IPython.terminal.debugger.vi_insert_mode
1306 - IPython.terminal.debugger.vi_insert_mode
1282 - IPython.terminal.interactiveshell.DISPLAY_BANNER_DEPRECATED
1307 - IPython.terminal.interactiveshell.DISPLAY_BANNER_DEPRECATED
1283 - IPython.terminal.ipapp.TerminalIPythonApp.parse_command_line
1308 - IPython.terminal.ipapp.TerminalIPythonApp.parse_command_line
1284 - IPython.testing.test
1309 - IPython.testing.test
1285 - IPython.utils.contexts.NoOpContext
1310 - IPython.utils.contexts.NoOpContext
1286 - IPython.utils.io.IOStream
1311 - IPython.utils.io.IOStream
1287 - IPython.utils.io.IOStream.close
1312 - IPython.utils.io.IOStream.close
1288 - IPython.utils.io.IOStream.write
1313 - IPython.utils.io.IOStream.write
1289 - IPython.utils.io.IOStream.writelines
1314 - IPython.utils.io.IOStream.writelines
1290 - IPython.utils.io.__warningregistry__
1315 - IPython.utils.io.__warningregistry__
1291 - IPython.utils.io.atomic_writing
1316 - IPython.utils.io.atomic_writing
1292 - IPython.utils.io.stderr
1317 - IPython.utils.io.stderr
1293 - IPython.utils.io.stdin
1318 - IPython.utils.io.stdin
1294 - IPython.utils.io.stdout
1319 - IPython.utils.io.stdout
1295 - IPython.utils.io.unicode_std_stream
1320 - IPython.utils.io.unicode_std_stream
1296 - IPython.utils.path.get_ipython_cache_dir
1321 - IPython.utils.path.get_ipython_cache_dir
1297 - IPython.utils.path.get_ipython_dir
1322 - IPython.utils.path.get_ipython_dir
1298 - IPython.utils.path.get_ipython_module_path
1323 - IPython.utils.path.get_ipython_module_path
1299 - IPython.utils.path.get_ipython_package_dir
1324 - IPython.utils.path.get_ipython_package_dir
1300 - IPython.utils.path.locate_profile
1325 - IPython.utils.path.locate_profile
1301 - IPython.utils.path.unquote_filename
1326 - IPython.utils.path.unquote_filename
1302 - IPython.utils.py3compat.PY2
1327 - IPython.utils.py3compat.PY2
1303 - IPython.utils.py3compat.PY3
1328 - IPython.utils.py3compat.PY3
1304 - IPython.utils.py3compat.buffer_to_bytes
1329 - IPython.utils.py3compat.buffer_to_bytes
1305 - IPython.utils.py3compat.builtin_mod_name
1330 - IPython.utils.py3compat.builtin_mod_name
1306 - IPython.utils.py3compat.cast_bytes
1331 - IPython.utils.py3compat.cast_bytes
1307 - IPython.utils.py3compat.getcwd
1332 - IPython.utils.py3compat.getcwd
1308 - IPython.utils.py3compat.isidentifier
1333 - IPython.utils.py3compat.isidentifier
1309 - IPython.utils.py3compat.u_format
1334 - IPython.utils.py3compat.u_format
1310
1335
1311 The following signatures differ between 7.x and 8.0::
1336 The following signatures differ between 7.x and 8.0::
1312
1337
1313 - IPython.core.completer.IPCompleter.unicode_name_matches(self, text)
1338 - IPython.core.completer.IPCompleter.unicode_name_matches(self, text)
1314 + IPython.core.completer.IPCompleter.unicode_name_matches(text)
1339 + IPython.core.completer.IPCompleter.unicode_name_matches(text)
1315
1340
1316 - IPython.core.completer.match_dict_keys(keys, prefix, delims)
1341 - IPython.core.completer.match_dict_keys(keys, prefix, delims)
1317 + IPython.core.completer.match_dict_keys(keys, prefix, delims, extra_prefix='None')
1342 + IPython.core.completer.match_dict_keys(keys, prefix, delims, extra_prefix='None')
1318
1343
1319 - IPython.core.interactiveshell.InteractiveShell.object_inspect_mime(self, oname, detail_level=0)
1344 - IPython.core.interactiveshell.InteractiveShell.object_inspect_mime(self, oname, detail_level=0)
1320 + IPython.core.interactiveshell.InteractiveShell.object_inspect_mime(self, oname, detail_level=0, omit_sections='()')
1345 + IPython.core.interactiveshell.InteractiveShell.object_inspect_mime(self, oname, detail_level=0, omit_sections='()')
1321
1346
1322 - IPython.core.interactiveshell.InteractiveShell.set_hook(self, name, hook, priority=50, str_key='None', re_key='None', _warn_deprecated=True)
1347 - IPython.core.interactiveshell.InteractiveShell.set_hook(self, name, hook, priority=50, str_key='None', re_key='None', _warn_deprecated=True)
1323 + IPython.core.interactiveshell.InteractiveShell.set_hook(self, name, hook, priority=50, str_key='None', re_key='None')
1348 + IPython.core.interactiveshell.InteractiveShell.set_hook(self, name, hook, priority=50, str_key='None', re_key='None')
1324
1349
1325 - IPython.core.oinspect.Inspector.info(self, obj, oname='', formatter='None', info='None', detail_level=0)
1350 - IPython.core.oinspect.Inspector.info(self, obj, oname='', formatter='None', info='None', detail_level=0)
1326 + IPython.core.oinspect.Inspector.info(self, obj, oname='', info='None', detail_level=0)
1351 + IPython.core.oinspect.Inspector.info(self, obj, oname='', info='None', detail_level=0)
1327
1352
1328 - IPython.core.oinspect.Inspector.pinfo(self, obj, oname='', formatter='None', info='None', detail_level=0, enable_html_pager=True)
1353 - IPython.core.oinspect.Inspector.pinfo(self, obj, oname='', formatter='None', info='None', detail_level=0, enable_html_pager=True)
1329 + IPython.core.oinspect.Inspector.pinfo(self, obj, oname='', formatter='None', info='None', detail_level=0, enable_html_pager=True, omit_sections='()')
1354 + IPython.core.oinspect.Inspector.pinfo(self, obj, oname='', formatter='None', info='None', detail_level=0, enable_html_pager=True, omit_sections='()')
1330
1355
1331 - IPython.core.profiledir.ProfileDir.copy_config_file(self, config_file, path='None', overwrite=False)
1356 - IPython.core.profiledir.ProfileDir.copy_config_file(self, config_file, path='None', overwrite=False)
1332 + IPython.core.profiledir.ProfileDir.copy_config_file(self, config_file, path, overwrite=False)
1357 + IPython.core.profiledir.ProfileDir.copy_config_file(self, config_file, path, overwrite=False)
1333
1358
1334 - IPython.core.ultratb.VerboseTB.format_record(self, frame, file, lnum, func, lines, index)
1359 - IPython.core.ultratb.VerboseTB.format_record(self, frame, file, lnum, func, lines, index)
1335 + IPython.core.ultratb.VerboseTB.format_record(self, frame_info)
1360 + IPython.core.ultratb.VerboseTB.format_record(self, frame_info)
1336
1361
1337 - IPython.terminal.embed.InteractiveShellEmbed.mainloop(self, local_ns='None', module='None', stack_depth=0, display_banner='None', global_ns='None', compile_flags='None')
1362 - IPython.terminal.embed.InteractiveShellEmbed.mainloop(self, local_ns='None', module='None', stack_depth=0, display_banner='None', global_ns='None', compile_flags='None')
1338 + IPython.terminal.embed.InteractiveShellEmbed.mainloop(self, local_ns='None', module='None', stack_depth=0, compile_flags='None')
1363 + IPython.terminal.embed.InteractiveShellEmbed.mainloop(self, local_ns='None', module='None', stack_depth=0, compile_flags='None')
1339
1364
1340 - IPython.terminal.embed.embed(**kwargs)
1365 - IPython.terminal.embed.embed(**kwargs)
1341 + IPython.terminal.embed.embed(*, header='', compile_flags='None', **kwargs)
1366 + IPython.terminal.embed.embed(*, header='', compile_flags='None', **kwargs)
1342
1367
1343 - IPython.terminal.interactiveshell.TerminalInteractiveShell.interact(self, display_banner='<object object at 0xffffff>')
1368 - IPython.terminal.interactiveshell.TerminalInteractiveShell.interact(self, display_banner='<object object at 0xffffff>')
1344 + IPython.terminal.interactiveshell.TerminalInteractiveShell.interact(self)
1369 + IPython.terminal.interactiveshell.TerminalInteractiveShell.interact(self)
1345
1370
1346 - IPython.terminal.interactiveshell.TerminalInteractiveShell.mainloop(self, display_banner='<object object at 0xffffff>')
1371 - IPython.terminal.interactiveshell.TerminalInteractiveShell.mainloop(self, display_banner='<object object at 0xffffff>')
1347 + IPython.terminal.interactiveshell.TerminalInteractiveShell.mainloop(self)
1372 + IPython.terminal.interactiveshell.TerminalInteractiveShell.mainloop(self)
1348
1373
1349 - IPython.utils.path.get_py_filename(name, force_win32='None')
1374 - IPython.utils.path.get_py_filename(name, force_win32='None')
1350 + IPython.utils.path.get_py_filename(name)
1375 + IPython.utils.path.get_py_filename(name)
1351
1376
1352 The following are new attributes (that might be inherited)::
1377 The following are new attributes (that might be inherited)::
1353
1378
1354 + IPython.core.completer.IPCompleter.unicode_names
1379 + IPython.core.completer.IPCompleter.unicode_names
1355 + IPython.core.debugger.InterruptiblePdb.precmd
1380 + IPython.core.debugger.InterruptiblePdb.precmd
1356 + IPython.core.debugger.Pdb.precmd
1381 + IPython.core.debugger.Pdb.precmd
1357 + IPython.core.ultratb.AutoFormattedTB.has_colors
1382 + IPython.core.ultratb.AutoFormattedTB.has_colors
1358 + IPython.core.ultratb.ColorTB.has_colors
1383 + IPython.core.ultratb.ColorTB.has_colors
1359 + IPython.core.ultratb.FormattedTB.has_colors
1384 + IPython.core.ultratb.FormattedTB.has_colors
1360 + IPython.core.ultratb.ListTB.has_colors
1385 + IPython.core.ultratb.ListTB.has_colors
1361 + IPython.core.ultratb.SyntaxTB.has_colors
1386 + IPython.core.ultratb.SyntaxTB.has_colors
1362 + IPython.core.ultratb.TBTools.has_colors
1387 + IPython.core.ultratb.TBTools.has_colors
1363 + IPython.core.ultratb.VerboseTB.has_colors
1388 + IPython.core.ultratb.VerboseTB.has_colors
1364 + IPython.terminal.debugger.TerminalPdb.do_interact
1389 + IPython.terminal.debugger.TerminalPdb.do_interact
1365 + IPython.terminal.debugger.TerminalPdb.precmd
1390 + IPython.terminal.debugger.TerminalPdb.precmd
1366
1391
1367 The following attribute/methods have been removed::
1392 The following attribute/methods have been removed::
1368
1393
1369 - IPython.core.application.BaseIPythonApplication.deprecated_subcommands
1394 - IPython.core.application.BaseIPythonApplication.deprecated_subcommands
1370 - IPython.core.ultratb.AutoFormattedTB.format_records
1395 - IPython.core.ultratb.AutoFormattedTB.format_records
1371 - IPython.core.ultratb.ColorTB.format_records
1396 - IPython.core.ultratb.ColorTB.format_records
1372 - IPython.core.ultratb.FormattedTB.format_records
1397 - IPython.core.ultratb.FormattedTB.format_records
1373 - IPython.terminal.embed.InteractiveShellEmbed.init_deprecation_warnings
1398 - IPython.terminal.embed.InteractiveShellEmbed.init_deprecation_warnings
1374 - IPython.terminal.embed.InteractiveShellEmbed.init_readline
1399 - IPython.terminal.embed.InteractiveShellEmbed.init_readline
1375 - IPython.terminal.embed.InteractiveShellEmbed.write
1400 - IPython.terminal.embed.InteractiveShellEmbed.write
1376 - IPython.terminal.embed.InteractiveShellEmbed.write_err
1401 - IPython.terminal.embed.InteractiveShellEmbed.write_err
1377 - IPython.terminal.interactiveshell.TerminalInteractiveShell.init_deprecation_warnings
1402 - IPython.terminal.interactiveshell.TerminalInteractiveShell.init_deprecation_warnings
1378 - IPython.terminal.interactiveshell.TerminalInteractiveShell.init_readline
1403 - IPython.terminal.interactiveshell.TerminalInteractiveShell.init_readline
1379 - IPython.terminal.interactiveshell.TerminalInteractiveShell.write
1404 - IPython.terminal.interactiveshell.TerminalInteractiveShell.write
1380 - IPython.terminal.interactiveshell.TerminalInteractiveShell.write_err
1405 - IPython.terminal.interactiveshell.TerminalInteractiveShell.write_err
1381 - IPython.terminal.ipapp.LocateIPythonApp.deprecated_subcommands
1406 - IPython.terminal.ipapp.LocateIPythonApp.deprecated_subcommands
1382 - IPython.terminal.ipapp.LocateIPythonApp.initialize_subcommand
1407 - IPython.terminal.ipapp.LocateIPythonApp.initialize_subcommand
1383 - IPython.terminal.ipapp.TerminalIPythonApp.deprecated_subcommands
1408 - IPython.terminal.ipapp.TerminalIPythonApp.deprecated_subcommands
1384 - IPython.terminal.ipapp.TerminalIPythonApp.initialize_subcommand
1409 - IPython.terminal.ipapp.TerminalIPythonApp.initialize_subcommand
General Comments 0
You need to be logged in to leave comments. Login now