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