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