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