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