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