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