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