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