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