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