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