##// END OF EJS Templates
Merge pull request #13660 from Carreau/wn733...
Matthias Bussonnier -
r27650:9bf2e66c
parent child
Show More
@@ -1,1784 +1,1795
1 ============
1 ============
2 7.x Series
2 7.x Series
3 ============
3 ============
4
4
5 .. _version 7.31.1:
5 .. _version 7.33:
6
6
7 IPython 7.31.1 (CVE-2022-21699)
7 IPython 7.33
8 ===============================
8 ============
9
9
10 Fixed CVE-2022-21699, see IPython 8.0.1 release notes for informations.
10 - Allow IPython hooks to receive current cell ids when frontend support it. See
11 :ghpull:`13600`
12
13 - ``?`` does not trigger the insertion of a new cell anymore as most frontend
14 allow proper multiline edition. :ghpull:`13625`
11
15
12
16
13 .. _version 7.32:
17 .. _version 7.32:
14
18
15 IPython 7.32
19 IPython 7.32
16 ============
20 ============
17
21
18
22
19
23
20 Autoload magic lazily
24 Autoload magic lazily
21 ---------------------
25 ---------------------
22
26
23 The ability to configure magics to be lazily loaded has been added to IPython.
27 The ability to configure magics to be lazily loaded has been added to IPython.
24 See the ``ipython --help-all`` section on ``MagicsManager.lazy_magic``.
28 See the ``ipython --help-all`` section on ``MagicsManager.lazy_magic``.
25 One can now use::
29 One can now use::
26
30
27 c.MagicsManager.lazy_magics = {
31 c.MagicsManager.lazy_magics = {
28 "my_magic": "slow.to.import",
32 "my_magic": "slow.to.import",
29 "my_other_magic": "also.slow",
33 "my_other_magic": "also.slow",
30 }
34 }
31
35
32 And on first use of ``%my_magic``, or corresponding cell magic, or other line magic,
36 And on first use of ``%my_magic``, or corresponding cell magic, or other line magic,
33 the corresponding ``load_ext`` will be called just before trying to invoke the magic.
37 the corresponding ``load_ext`` will be called just before trying to invoke the magic.
34
38
35 Misc
39 Misc
36 ----
40 ----
37
41
38 - Update sphinxify for Docrepr 0.2.0 :ghpull:`13503`.
42 - Update sphinxify for Docrepr 0.2.0 :ghpull:`13503`.
39 - Set co_name for cells run line by line (to fix debugging with Python 3.10)
43 - Set co_name for cells run line by line (to fix debugging with Python 3.10)
40 :ghpull:`13535`
44 :ghpull:`13535`
41
45
42
46
43 Many thanks to all the contributors to this release. You can find all individual
47 Many thanks to all the contributors to this release. You can find all individual
44 contributions to this milestone `on github
48 contributions to this milestone `on github
45 <https://github.com/ipython/ipython/milestone/99>`__.
49 <https://github.com/ipython/ipython/milestone/99>`__.
46
50
47 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
51 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
48 work on IPython and related libraries.
52 work on IPython and related libraries.
49
53
54 .. _version 7.31.1:
55
56 IPython 7.31.1 (CVE-2022-21699)
57 ===============================
58
59 Fixed CVE-2022-21699, see IPython 8.0.1 release notes for informations.
60
50 .. _version 7.31:
61 .. _version 7.31:
51
62
52 IPython 7.31
63 IPython 7.31
53 ============
64 ============
54
65
55 IPython 7.31 brings a couple of backports and fixes from the 8.0 branches,
66 IPython 7.31 brings a couple of backports and fixes from the 8.0 branches,
56 it is likely one of the last releases of the 7.x series, as 8.0 will probably be released
67 it is likely one of the last releases of the 7.x series, as 8.0 will probably be released
57 between this release and what would have been 7.32.
68 between this release and what would have been 7.32.
58
69
59 Please test 8.0 beta/rc releases in addition to this release.
70 Please test 8.0 beta/rc releases in addition to this release.
60
71
61 This Releases:
72 This Releases:
62 - Backport some fixes for Python 3.10 (:ghpull:`13412`)
73 - Backport some fixes for Python 3.10 (:ghpull:`13412`)
63 - use full-alpha transparency on dvipng rendered LaTeX (:ghpull:`13372`)
74 - use full-alpha transparency on dvipng rendered LaTeX (:ghpull:`13372`)
64
75
65 Many thanks to all the contributors to this release. You can find all individual
76 Many thanks to all the contributors to this release. You can find all individual
66 contributions to this milestone `on github
77 contributions to this milestone `on github
67 <https://github.com/ipython/ipython/milestone/95>`__.
78 <https://github.com/ipython/ipython/milestone/95>`__.
68
79
69 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
80 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
70 work on IPython and related libraries.
81 work on IPython and related libraries.
71
82
72
83
73 .. _version 7.30:
84 .. _version 7.30:
74
85
75 IPython 7.30
86 IPython 7.30
76 ============
87 ============
77
88
78 IPython 7.30 fixes a couple of bugs introduce in previous releases (in
89 IPython 7.30 fixes a couple of bugs introduce in previous releases (in
79 particular with respect to path handling), and introduce a few features and
90 particular with respect to path handling), and introduce a few features and
80 improvements:
91 improvements:
81
92
82 Notably we will highlight :ghpull:`13267` "Document that ``%run`` can execute
93 Notably we will highlight :ghpull:`13267` "Document that ``%run`` can execute
83 notebooks and ipy scripts.", which is the first commit of Fernando Pérez since
94 notebooks and ipy scripts.", which is the first commit of Fernando Pérez since
84 mid 2016 (IPython 5.1). If you are new to IPython, Fernando created IPython in
95 mid 2016 (IPython 5.1). If you are new to IPython, Fernando created IPython in
85 2001. The other most recent contribution of Fernando to IPython itself was
96 2001. The other most recent contribution of Fernando to IPython itself was
86 May 2018, by reviewing and merging PRs. I want to note that Fernando is still
97 May 2018, by reviewing and merging PRs. I want to note that Fernando is still
87 active but mostly as a mentor and leader of the whole Jupyter organisation, but
98 active but mostly as a mentor and leader of the whole Jupyter organisation, but
88 we're still happy to see him contribute code !
99 we're still happy to see him contribute code !
89
100
90 :ghpull:`13290` "Use sphinxify (if available) in object_inspect_mime path"
101 :ghpull:`13290` "Use sphinxify (if available) in object_inspect_mime path"
91 should allow richer Repr of docstrings when using jupyterlab inspector.
102 should allow richer Repr of docstrings when using jupyterlab inspector.
92
103
93 :ghpull:`13311` make the debugger use ``ThreadPoolExecutor`` for debugger cmdloop.
104 :ghpull:`13311` make the debugger use ``ThreadPoolExecutor`` for debugger cmdloop.
94 This should fix some issues/infinite loop, but let us know if you come across
105 This should fix some issues/infinite loop, but let us know if you come across
95 any regressions. In particular this fixes issues with `kmaork/madbg <https://github.com/kmaork/madbg>`_,
106 any regressions. In particular this fixes issues with `kmaork/madbg <https://github.com/kmaork/madbg>`_,
96 a remote debugger for IPython.
107 a remote debugger for IPython.
97
108
98 Note that this is likely the ante-penultimate release of IPython 7.x as a stable
109 Note that this is likely the ante-penultimate release of IPython 7.x as a stable
99 branch, as I hope to release IPython 8.0 as well as IPython 7.31 next
110 branch, as I hope to release IPython 8.0 as well as IPython 7.31 next
100 month/early 2022.
111 month/early 2022.
101
112
102 IPython 8.0 will drop support for Python 3.7, removed nose as a dependency, and
113 IPython 8.0 will drop support for Python 3.7, removed nose as a dependency, and
103 7.x will only get critical bug fixes with 8.x becoming the new stable. This will
114 7.x will only get critical bug fixes with 8.x becoming the new stable. This will
104 not be possible without `NumFOCUS Small Development Grants
115 not be possible without `NumFOCUS Small Development Grants
105 <https://numfocus.org/programs/small-development-grants>`_ Which allowed us to
116 <https://numfocus.org/programs/small-development-grants>`_ Which allowed us to
106 hire `Nikita Kniazev <https://github.com/Kojoley>`_ who provide Python and C++
117 hire `Nikita Kniazev <https://github.com/Kojoley>`_ who provide Python and C++
107 help and contracting work.
118 help and contracting work.
108
119
109
120
110 Many thanks to all the contributors to this release. You can find all individual
121 Many thanks to all the contributors to this release. You can find all individual
111 contributions to this milestone `on github
122 contributions to this milestone `on github
112 <https://github.com/ipython/ipython/milestone/94?closed=1>`__.
123 <https://github.com/ipython/ipython/milestone/94?closed=1>`__.
113
124
114 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
125 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
115 work on IPython and related libraries.
126 work on IPython and related libraries.
116
127
117
128
118 .. _version 7.29:
129 .. _version 7.29:
119
130
120 IPython 7.29
131 IPython 7.29
121 ============
132 ============
122
133
123
134
124 IPython 7.29 brings a couple of new functionalities to IPython and a number of bugfixes.
135 IPython 7.29 brings a couple of new functionalities to IPython and a number of bugfixes.
125 It is one of the largest recent release, relatively speaking, with close to 15 Pull Requests.
136 It is one of the largest recent release, relatively speaking, with close to 15 Pull Requests.
126
137
127
138
128 - fix an issue where base64 was returned instead of bytes when showing figures :ghpull:`13162`
139 - fix an issue where base64 was returned instead of bytes when showing figures :ghpull:`13162`
129 - fix compatibility with PyQt6, PySide 6 :ghpull:`13172`. This may be of
140 - fix compatibility with PyQt6, PySide 6 :ghpull:`13172`. This may be of
130 interest if you are running on Apple Silicon as only qt6.2+ is natively
141 interest if you are running on Apple Silicon as only qt6.2+ is natively
131 compatible.
142 compatible.
132 - fix matplotlib qtagg eventloop :ghpull:`13179`
143 - fix matplotlib qtagg eventloop :ghpull:`13179`
133 - Multiple docs fixes, typos, ... etc.
144 - Multiple docs fixes, typos, ... etc.
134 - Debugger will now exit by default on SigInt :ghpull:`13218`, this will be
145 - Debugger will now exit by default on SigInt :ghpull:`13218`, this will be
135 useful in notebook/lab if you forgot to exit the debugger. "Interrupt Kernel"
146 useful in notebook/lab if you forgot to exit the debugger. "Interrupt Kernel"
136 will now exist the debugger.
147 will now exist the debugger.
137
148
138 It give Pdb the ability to skip code in decorators. If functions contain a
149 It give Pdb the ability to skip code in decorators. If functions contain a
139 special value names ``__debuggerskip__ = True|False``, the function will not be
150 special value names ``__debuggerskip__ = True|False``, the function will not be
140 stepped into, and Pdb will step into lower frames only if the value is set to
151 stepped into, and Pdb will step into lower frames only if the value is set to
141 ``False``. The exact behavior is still likely to have corner cases and will be
152 ``False``. The exact behavior is still likely to have corner cases and will be
142 refined in subsequent releases. Feedback welcome. See the debugger module
153 refined in subsequent releases. Feedback welcome. See the debugger module
143 documentation for more info. Thanks to the `D. E. Shaw
154 documentation for more info. Thanks to the `D. E. Shaw
144 group <https://deshaw.com/>`__ for funding this feature.
155 group <https://deshaw.com/>`__ for funding this feature.
145
156
146 The main branch of IPython is receiving a number of changes as we received a
157 The main branch of IPython is receiving a number of changes as we received a
147 `NumFOCUS SDG <https://numfocus.org/programs/small-development-grants>`__
158 `NumFOCUS SDG <https://numfocus.org/programs/small-development-grants>`__
148 ($4800), to help us finish replacing ``nose`` by ``pytest``, and make IPython
159 ($4800), to help us finish replacing ``nose`` by ``pytest``, and make IPython
149 future proof with an 8.0 release.
160 future proof with an 8.0 release.
150
161
151
162
152 Many thanks to all the contributors to this release. You can find all individual
163 Many thanks to all the contributors to this release. You can find all individual
153 contributions to this milestone `on github
164 contributions to this milestone `on github
154 <https://github.com/ipython/ipython/milestone/93>`__.
165 <https://github.com/ipython/ipython/milestone/93>`__.
155
166
156 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
167 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
157 work on IPython and related libraries.
168 work on IPython and related libraries.
158
169
159
170
160 .. _version 7.28:
171 .. _version 7.28:
161
172
162 IPython 7.28
173 IPython 7.28
163 ============
174 ============
164
175
165
176
166 IPython 7.28 is again a minor release that mostly bring bugfixes, and couple of
177 IPython 7.28 is again a minor release that mostly bring bugfixes, and couple of
167 improvement. Many thanks to MrMino, who again did all the work this month, and
178 improvement. Many thanks to MrMino, who again did all the work this month, and
168 made a number of documentation improvements.
179 made a number of documentation improvements.
169
180
170 Here is a non-exhaustive list of changes,
181 Here is a non-exhaustive list of changes,
171
182
172 Fixes:
183 Fixes:
173
184
174 - async with doesn't allow newlines :ghpull:`13090`
185 - async with doesn't allow newlines :ghpull:`13090`
175 - Dynamically changing to vi mode via %config magic) :ghpull:`13091`
186 - Dynamically changing to vi mode via %config magic) :ghpull:`13091`
176
187
177 Virtualenv handling fixes:
188 Virtualenv handling fixes:
178
189
179 - init_virtualenv now uses Pathlib :ghpull:`12548`
190 - init_virtualenv now uses Pathlib :ghpull:`12548`
180 - Fix Improper path comparison of virtualenv directories :ghpull:`13140`
191 - Fix Improper path comparison of virtualenv directories :ghpull:`13140`
181 - Fix virtual environment user warning for lower case pathes :ghpull:`13094`
192 - Fix virtual environment user warning for lower case pathes :ghpull:`13094`
182 - Adapt to all sorts of drive names for cygwin :ghpull:`13153`
193 - Adapt to all sorts of drive names for cygwin :ghpull:`13153`
183
194
184 New Features:
195 New Features:
185
196
186 - enable autoplay in embed YouTube player :ghpull:`13133`
197 - enable autoplay in embed YouTube player :ghpull:`13133`
187
198
188 Documentation:
199 Documentation:
189
200
190 - Fix formatting for the core.interactiveshell documentation :ghpull:`13118`
201 - Fix formatting for the core.interactiveshell documentation :ghpull:`13118`
191 - Fix broken ipyparallel's refs :ghpull:`13138`
202 - Fix broken ipyparallel's refs :ghpull:`13138`
192 - Improve formatting of %time documentation :ghpull:`13125`
203 - Improve formatting of %time documentation :ghpull:`13125`
193 - Reword the YouTubeVideo autoplay WN :ghpull:`13147`
204 - Reword the YouTubeVideo autoplay WN :ghpull:`13147`
194
205
195
206
196 Highlighted features
207 Highlighted features
197 --------------------
208 --------------------
198
209
199
210
200 ``YouTubeVideo`` autoplay and the ability to add extra attributes to ``IFrame``
211 ``YouTubeVideo`` autoplay and the ability to add extra attributes to ``IFrame``
201 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
212 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
202
213
203 You can add any extra attributes to the ``<iframe>`` tag using the new
214 You can add any extra attributes to the ``<iframe>`` tag using the new
204 ``extras`` argument in the ``IFrame`` class. For example::
215 ``extras`` argument in the ``IFrame`` class. For example::
205
216
206 In [1]: from IPython.display import IFrame
217 In [1]: from IPython.display import IFrame
207
218
208 In [2]: IFrame(src="src", width=300, height=300, extras=['loading="eager"'])
219 In [2]: IFrame(src="src", width=300, height=300, extras=['loading="eager"'])
209
220
210 The above cells will result in the following HTML code being displayed in a
221 The above cells will result in the following HTML code being displayed in a
211 notebook::
222 notebook::
212
223
213 <iframe
224 <iframe
214 width="300"
225 width="300"
215 height="300"
226 height="300"
216 src="src"
227 src="src"
217 frameborder="0"
228 frameborder="0"
218 allowfullscreen
229 allowfullscreen
219 loading="eager"
230 loading="eager"
220 ></iframe>
231 ></iframe>
221
232
222 Related to the above, the ``YouTubeVideo`` class now takes an
233 Related to the above, the ``YouTubeVideo`` class now takes an
223 ``allow_autoplay`` flag, which sets up the iframe of the embedded YouTube video
234 ``allow_autoplay`` flag, which sets up the iframe of the embedded YouTube video
224 such that it allows autoplay.
235 such that it allows autoplay.
225
236
226 .. note::
237 .. note::
227 Whether this works depends on the autoplay policy of the browser rendering
238 Whether this works depends on the autoplay policy of the browser rendering
228 the HTML allowing it. It also could get blocked by some browser extensions.
239 the HTML allowing it. It also could get blocked by some browser extensions.
229
240
230 Try it out!
241 Try it out!
231 ::
242 ::
232
243
233 In [1]: from IPython.display import YouTubeVideo
244 In [1]: from IPython.display import YouTubeVideo
234
245
235 In [2]: YouTubeVideo("dQw4w9WgXcQ", allow_autoplay=True)
246 In [2]: YouTubeVideo("dQw4w9WgXcQ", allow_autoplay=True)
236
247
237
248
238
249
239 Thanks
250 Thanks
240 ------
251 ------
241
252
242 Many thanks to all the contributors to this release. You can find all individual
253 Many thanks to all the contributors to this release. You can find all individual
243 contributions to this milestone `on github
254 contributions to this milestone `on github
244 <https://github.com/ipython/ipython/milestone/92>`__.
255 <https://github.com/ipython/ipython/milestone/92>`__.
245
256
246 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
257 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
247 work on IPython and related libraries.
258 work on IPython and related libraries.
248
259
249
260
250 .. _version 7.27:
261 .. _version 7.27:
251
262
252 IPython 7.27
263 IPython 7.27
253 ============
264 ============
254
265
255 IPython 7.27 is a minor release that fixes a couple of issues and compatibility.
266 IPython 7.27 is a minor release that fixes a couple of issues and compatibility.
256
267
257 - Add support for GTK4 :ghpull:`131011`
268 - Add support for GTK4 :ghpull:`131011`
258 - Add support for Qt6 :ghpull:`13085`
269 - Add support for Qt6 :ghpull:`13085`
259 - Fix an issue with pip magic on windows :ghpull:`13093`
270 - Fix an issue with pip magic on windows :ghpull:`13093`
260
271
261 Thanks
272 Thanks
262 ------
273 ------
263
274
264 Many thanks to all the contributors to this release. You can find all individual
275 Many thanks to all the contributors to this release. You can find all individual
265 contributions to this milestone `on github
276 contributions to this milestone `on github
266 <https://github.com/ipython/ipython/milestone/91>`__.
277 <https://github.com/ipython/ipython/milestone/91>`__.
267
278
268 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
279 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
269 work on IPython and related libraries.
280 work on IPython and related libraries.
270
281
271 .. _version 7.26:
282 .. _version 7.26:
272
283
273 IPython 7.26
284 IPython 7.26
274 ============
285 ============
275
286
276 IPython 7.26 is a minor release that fixes a couple of issues, updates in API
287 IPython 7.26 is a minor release that fixes a couple of issues, updates in API
277 and Copyright/Licenses issues around various part of the codebase.
288 and Copyright/Licenses issues around various part of the codebase.
278
289
279 We'll highlight `this issue <https://github.com/ipython/ipython/issues/13039>`
290 We'll highlight `this issue <https://github.com/ipython/ipython/issues/13039>`
280 pointing out we were including and refereeing to code from Stack Overflow which
291 pointing out we were including and refereeing to code from Stack Overflow which
281 was CC-BY-SA, hence incompatible with the BSD license of IPython. This lead us
292 was CC-BY-SA, hence incompatible with the BSD license of IPython. This lead us
282 to a rewriting of the corresponding logic which in our case was done in a more
293 to a rewriting of the corresponding logic which in our case was done in a more
283 efficient way (in our case we were searching string prefixes instead of full
294 efficient way (in our case we were searching string prefixes instead of full
284 strings).
295 strings).
285
296
286 You will notice also a number of documentation improvements and cleanup.
297 You will notice also a number of documentation improvements and cleanup.
287
298
288 Of particular interest are the following Pull-requests:
299 Of particular interest are the following Pull-requests:
289
300
290
301
291 - The IPython directive now uses Sphinx logging for warnings. :ghpull:`13030`.
302 - The IPython directive now uses Sphinx logging for warnings. :ghpull:`13030`.
292 - Add expiry days option to pastebin magic and change http protocol to https.
303 - Add expiry days option to pastebin magic and change http protocol to https.
293 :ghpull:`13056`
304 :ghpull:`13056`
294 - Make Ipython.utils.timing work with jupyterlite :ghpull:`13050`.
305 - Make Ipython.utils.timing work with jupyterlite :ghpull:`13050`.
295
306
296 Pastebin magic expiry days option
307 Pastebin magic expiry days option
297 ---------------------------------
308 ---------------------------------
298
309
299 The Pastebin magic now has ``-e`` option to determine
310 The Pastebin magic now has ``-e`` option to determine
300 the number of days for paste expiration. For example
311 the number of days for paste expiration. For example
301 the paste that created with ``%pastebin -e 20 1`` magic will
312 the paste that created with ``%pastebin -e 20 1`` magic will
302 be available for next 20 days.
313 be available for next 20 days.
303
314
304
315
305
316
306
317
307
318
308 Thanks
319 Thanks
309 ------
320 ------
310
321
311 Many thanks to all the contributors to this release and in particular MrMino who
322 Many thanks to all the contributors to this release and in particular MrMino who
312 is doing most of the work those days. You can find all individual contributions
323 is doing most of the work those days. You can find all individual contributions
313 to this milestone `on github <https://github.com/ipython/ipython/milestone/90>`__.
324 to this milestone `on github <https://github.com/ipython/ipython/milestone/90>`__.
314
325
315 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
326 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
316 work on IPython and related libraries.
327 work on IPython and related libraries.
317
328
318
329
319 .. _version 7.25:
330 .. _version 7.25:
320
331
321 IPython 7.25
332 IPython 7.25
322 ============
333 ============
323
334
324 IPython 7.25 is a minor release that contains a single bugfix, which is highly
335 IPython 7.25 is a minor release that contains a single bugfix, which is highly
325 recommended for all users of ipdb, ipython debugger %debug magic and similar.
336 recommended for all users of ipdb, ipython debugger %debug magic and similar.
326
337
327 Issuing commands like ``where`` from within the debugger would reset the
338 Issuing commands like ``where`` from within the debugger would reset the
328 local variables changes made by the user. It is interesting to look at the root
339 local variables changes made by the user. It is interesting to look at the root
329 cause of the issue as accessing an attribute (``frame.f_locals``) would trigger
340 cause of the issue as accessing an attribute (``frame.f_locals``) would trigger
330 this side effects.
341 this side effects.
331
342
332 Thanks in particular to the patience from the reporters at D.E. Shaw for their
343 Thanks in particular to the patience from the reporters at D.E. Shaw for their
333 initial bug report that was due to a similar coding oversight in an extension,
344 initial bug report that was due to a similar coding oversight in an extension,
334 and who took time to debug and narrow down the problem.
345 and who took time to debug and narrow down the problem.
335
346
336 Thanks
347 Thanks
337 ------
348 ------
338
349
339 Many thanks to all the contributors to this release you can find all individual
350 Many thanks to all the contributors to this release you can find all individual
340 contributions to this milestone `on github <https://github.com/ipython/ipython/milestone/89>`__.
351 contributions to this milestone `on github <https://github.com/ipython/ipython/milestone/89>`__.
341
352
342 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
353 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
343 work on IPython and related libraries.
354 work on IPython and related libraries.
344
355
345
356
346 .. _version 7.24:
357 .. _version 7.24:
347
358
348 IPython 7.24
359 IPython 7.24
349 ============
360 ============
350
361
351 Third release of IPython for 2021, mostly containing bug fixes. A couple of not
362 Third release of IPython for 2021, mostly containing bug fixes. A couple of not
352 typical updates:
363 typical updates:
353
364
354 Misc
365 Misc
355 ----
366 ----
356
367
357
368
358 - Fix an issue where ``%recall`` would both succeeded and print an error message
369 - Fix an issue where ``%recall`` would both succeeded and print an error message
359 it failed. :ghpull:`12952`
370 it failed. :ghpull:`12952`
360 - Drop support for NumPy 1.16 – practically has no effect beyond indicating in
371 - Drop support for NumPy 1.16 – practically has no effect beyond indicating in
361 package metadata that we do not support it. :ghpull:`12937`
372 package metadata that we do not support it. :ghpull:`12937`
362
373
363 Debugger improvements
374 Debugger improvements
364 ---------------------
375 ---------------------
365
376
366 The debugger (and ``%debug`` magic) have been improved and can skip or hide frames
377 The debugger (and ``%debug`` magic) have been improved and can skip or hide frames
367 originating from files that are not writable to the user, as these are less
378 originating from files that are not writable to the user, as these are less
368 likely to be the source of errors, or be part of system files this can be a useful
379 likely to be the source of errors, or be part of system files this can be a useful
369 addition when debugging long errors.
380 addition when debugging long errors.
370
381
371 In addition to the global ``skip_hidden True|False`` command, the debugger has
382 In addition to the global ``skip_hidden True|False`` command, the debugger has
372 gained finer grained control of predicates as to whether to a frame should be
383 gained finer grained control of predicates as to whether to a frame should be
373 considered hidden. So far 3 predicates are available :
384 considered hidden. So far 3 predicates are available :
374
385
375 - ``tbhide``: frames containing the local variable ``__tracebackhide__`` set to
386 - ``tbhide``: frames containing the local variable ``__tracebackhide__`` set to
376 True.
387 True.
377 - ``readonly``: frames originating from readonly files, set to False.
388 - ``readonly``: frames originating from readonly files, set to False.
378 - ``ipython_internal``: frames that are likely to be from IPython internal
389 - ``ipython_internal``: frames that are likely to be from IPython internal
379 code, set to True.
390 code, set to True.
380
391
381 You can toggle individual predicates during a session with
392 You can toggle individual predicates during a session with
382
393
383 .. code-block::
394 .. code-block::
384
395
385 ipdb> skip_predicates readonly True
396 ipdb> skip_predicates readonly True
386
397
387 Read-only files will now be considered hidden frames.
398 Read-only files will now be considered hidden frames.
388
399
389
400
390 You can call ``skip_predicates`` without arguments to see the states of current
401 You can call ``skip_predicates`` without arguments to see the states of current
391 predicates:
402 predicates:
392
403
393 .. code-block::
404 .. code-block::
394
405
395 ipdb> skip_predicates
406 ipdb> skip_predicates
396 current predicates:
407 current predicates:
397 tbhide : True
408 tbhide : True
398 readonly : False
409 readonly : False
399 ipython_internal : True
410 ipython_internal : True
400
411
401 If all predicates are set to ``False``, ``skip_hidden`` will practically have
412 If all predicates are set to ``False``, ``skip_hidden`` will practically have
402 no effect. We attempt to warn you when all predicates are False.
413 no effect. We attempt to warn you when all predicates are False.
403
414
404 Note that the ``readonly`` predicate may increase disk access as we check for
415 Note that the ``readonly`` predicate may increase disk access as we check for
405 file access permission for all frames on many command invocation, but is usually
416 file access permission for all frames on many command invocation, but is usually
406 cached by operating systems. Let us know if you encounter any issues.
417 cached by operating systems. Let us know if you encounter any issues.
407
418
408 As the IPython debugger does not use the traitlets infrastructure for
419 As the IPython debugger does not use the traitlets infrastructure for
409 configuration, by editing your ``.pdbrc`` files and appending commands you would
420 configuration, by editing your ``.pdbrc`` files and appending commands you would
410 like to be executed just before entering the interactive prompt. For example:
421 like to be executed just before entering the interactive prompt. For example:
411
422
412
423
413 .. code::
424 .. code::
414
425
415 # file : ~/.pdbrc
426 # file : ~/.pdbrc
416 skip_predicates readonly True
427 skip_predicates readonly True
417 skip_predicates tbhide False
428 skip_predicates tbhide False
418
429
419 Will hide read only frames by default and show frames marked with
430 Will hide read only frames by default and show frames marked with
420 ``__tracebackhide__``.
431 ``__tracebackhide__``.
421
432
422
433
423
434
424
435
425 Thanks
436 Thanks
426 ------
437 ------
427
438
428 Many thanks to all the contributors to this release you can find all individual
439 Many thanks to all the contributors to this release you can find all individual
429 contributions to this milestone `on github <https://github.com/ipython/ipython/milestone/87>`__.
440 contributions to this milestone `on github <https://github.com/ipython/ipython/milestone/87>`__.
430
441
431 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
442 Thanks as well to the `D. E. Shaw group <https://deshaw.com/>`__ for sponsoring
432 work on IPython and related libraries, in particular above mentioned
443 work on IPython and related libraries, in particular above mentioned
433 improvements to the debugger.
444 improvements to the debugger.
434
445
435
446
436
447
437
448
438 .. _version 7.23:
449 .. _version 7.23:
439
450
440 IPython 7.23 and 7.23.1
451 IPython 7.23 and 7.23.1
441 =======================
452 =======================
442
453
443
454
444 Third release of IPython for 2021, mostly containing bug fixes. A couple of not
455 Third release of IPython for 2021, mostly containing bug fixes. A couple of not
445 typical updates:
456 typical updates:
446
457
447 - We moved to GitHub actions away from Travis-CI, the transition may not be
458 - We moved to GitHub actions away from Travis-CI, the transition may not be
448 100% complete (not testing on nightly anymore), but as we ran out of
459 100% complete (not testing on nightly anymore), but as we ran out of
449 Travis-Ci hours on the IPython organisation that was a necessary step.
460 Travis-Ci hours on the IPython organisation that was a necessary step.
450 :ghpull:`12900`.
461 :ghpull:`12900`.
451
462
452 - We have a new dependency: ``matplotlib-inline``, which try to extract
463 - We have a new dependency: ``matplotlib-inline``, which try to extract
453 matplotlib inline backend specific behavior. It is available on PyPI and
464 matplotlib inline backend specific behavior. It is available on PyPI and
454 conda-forge thus should not be a problem to upgrade to this version. If you
465 conda-forge thus should not be a problem to upgrade to this version. If you
455 are a package maintainer that might be an extra dependency to package first.
466 are a package maintainer that might be an extra dependency to package first.
456 :ghpull:`12817` (IPython 7.23.1 fix a typo that made this change fail)
467 :ghpull:`12817` (IPython 7.23.1 fix a typo that made this change fail)
457
468
458 In the addition/new feature category, ``display()`` now have a ``clear=True``
469 In the addition/new feature category, ``display()`` now have a ``clear=True``
459 option to clear the display if any further outputs arrives, allowing users to
470 option to clear the display if any further outputs arrives, allowing users to
460 avoid having to use ``clear_output()`` directly. :ghpull:`12823`.
471 avoid having to use ``clear_output()`` directly. :ghpull:`12823`.
461
472
462 In bug fixes category, this release fix an issue when printing tracebacks
473 In bug fixes category, this release fix an issue when printing tracebacks
463 containing Unicode characters :ghpull:`12758`.
474 containing Unicode characters :ghpull:`12758`.
464
475
465 In code cleanup category :ghpull:`12932` remove usage of some deprecated
476 In code cleanup category :ghpull:`12932` remove usage of some deprecated
466 functionality for compatibility with Python 3.10.
477 functionality for compatibility with Python 3.10.
467
478
468
479
469
480
470 Thanks
481 Thanks
471 ------
482 ------
472
483
473 Many thanks to all the contributors to this release you can find all individual
484 Many thanks to all the contributors to this release you can find all individual
474 contributions to this milestone `on github <https://github.com/ipython/ipython/milestone/86>`__.
485 contributions to this milestone `on github <https://github.com/ipython/ipython/milestone/86>`__.
475 In particular MrMino for responding to almost all new issues, and triaging many
486 In particular MrMino for responding to almost all new issues, and triaging many
476 of the old ones, as well as takluyver, minrk, willingc for reacting quikly when
487 of the old ones, as well as takluyver, minrk, willingc for reacting quikly when
477 we ran out of CI Hours.
488 we ran out of CI Hours.
478
489
479 Thanks as well to organisations, QuantStack (martinRenou and SylvainCorlay) for
490 Thanks as well to organisations, QuantStack (martinRenou and SylvainCorlay) for
480 extracting matplotlib inline backend into its own package, and the `D. E. Shaw group
491 extracting matplotlib inline backend into its own package, and the `D. E. Shaw group
481 <https://deshaw.com/>`__ for sponsoring work on IPython and related libraries.
492 <https://deshaw.com/>`__ for sponsoring work on IPython and related libraries.
482
493
483
494
484 .. _version 7.22:
495 .. _version 7.22:
485
496
486 IPython 7.22
497 IPython 7.22
487 ============
498 ============
488
499
489 Second release of IPython for 2021, mostly containing bug fixes. Here is a quick
500 Second release of IPython for 2021, mostly containing bug fixes. Here is a quick
490 rundown of the few changes.
501 rundown of the few changes.
491
502
492 - Fix some ``sys.excepthook`` shenanigan when embedding with qt, recommended if
503 - Fix some ``sys.excepthook`` shenanigan when embedding with qt, recommended if
493 you – for example – use `napari <https://napari.org>`__. :ghpull:`12842`.
504 you – for example – use `napari <https://napari.org>`__. :ghpull:`12842`.
494 - Fix bug when using the new ipdb ``%context`` magic :ghpull:`12844`
505 - Fix bug when using the new ipdb ``%context`` magic :ghpull:`12844`
495 - Couples of deprecation cleanup :ghpull:`12868`
506 - Couples of deprecation cleanup :ghpull:`12868`
496 - Update for new dpast.com api if you use the ``%pastbin`` magic. :ghpull:`12712`
507 - Update for new dpast.com api if you use the ``%pastbin`` magic. :ghpull:`12712`
497 - Remove support for numpy before 1.16. :ghpull:`12836`
508 - Remove support for numpy before 1.16. :ghpull:`12836`
498
509
499
510
500 Thanks
511 Thanks
501 ------
512 ------
502
513
503 We have a new team member that you should see more often on the IPython
514 We have a new team member that you should see more often on the IPython
504 repository, Błażej Michalik (@MrMino) have been doing regular contributions to
515 repository, Błażej Michalik (@MrMino) have been doing regular contributions to
505 IPython, and spent time replying to many issues and guiding new users to the
516 IPython, and spent time replying to many issues and guiding new users to the
506 codebase; they now have triage permissions to the IPython repository and we'll
517 codebase; they now have triage permissions to the IPython repository and we'll
507 work toward giving them more permission in the future.
518 work toward giving them more permission in the future.
508
519
509 Many thanks to all the contributors to this release you can find all individual
520 Many thanks to all the contributors to this release you can find all individual
510 contributions to this milestone `on github <https://github.com/ipython/ipython/milestone/84>`__.
521 contributions to this milestone `on github <https://github.com/ipython/ipython/milestone/84>`__.
511
522
512 Thanks as well to organisations, QuantStack for working on debugger
523 Thanks as well to organisations, QuantStack for working on debugger
513 compatibility for Xeus_python, and the `D. E. Shaw group
524 compatibility for Xeus_python, and the `D. E. Shaw group
514 <https://deshaw.com/>`__ for sponsoring work on IPython and related libraries.
525 <https://deshaw.com/>`__ for sponsoring work on IPython and related libraries.
515
526
516 .. _version 721:
527 .. _version 721:
517
528
518 IPython 7.21
529 IPython 7.21
519 ============
530 ============
520
531
521 IPython 7.21 is the first release we have back on schedule of one release every
532 IPython 7.21 is the first release we have back on schedule of one release every
522 month; it contains a number of minor fixes and improvements, notably, the new
533 month; it contains a number of minor fixes and improvements, notably, the new
523 context command for ipdb
534 context command for ipdb
524
535
525
536
526 New "context" command in ipdb
537 New "context" command in ipdb
527 -----------------------------
538 -----------------------------
528
539
529 It is now possible to change the number of lines shown in the backtrace
540 It is now possible to change the number of lines shown in the backtrace
530 information in ipdb using "context" command. :ghpull:`12826`
541 information in ipdb using "context" command. :ghpull:`12826`
531
542
532 (thanks @MrMino, there are other improvement from them on master).
543 (thanks @MrMino, there are other improvement from them on master).
533
544
534 Other notable changes in IPython 7.21
545 Other notable changes in IPython 7.21
535 -------------------------------------
546 -------------------------------------
536
547
537 - Fix some issues on new osx-arm64 :ghpull:`12804`, :ghpull:`12807`.
548 - Fix some issues on new osx-arm64 :ghpull:`12804`, :ghpull:`12807`.
538 - Compatibility with Xeus-Python for debugger protocol, :ghpull:`12809`
549 - Compatibility with Xeus-Python for debugger protocol, :ghpull:`12809`
539 - Misc docs fixes for compatibility and uniformity with Numpydoc.
550 - Misc docs fixes for compatibility and uniformity with Numpydoc.
540 :ghpull:`12824`
551 :ghpull:`12824`
541
552
542
553
543 Thanks
554 Thanks
544 ------
555 ------
545
556
546 Many thanks to all the contributors to this release you can find all individual
557 Many thanks to all the contributors to this release you can find all individual
547 contribution to this milestone `on github <https://github.com/ipython/ipython/milestone/83>`__.
558 contribution to this milestone `on github <https://github.com/ipython/ipython/milestone/83>`__.
548
559
549
560
550 .. _version 720:
561 .. _version 720:
551
562
552 IPython 7.20
563 IPython 7.20
553 ============
564 ============
554
565
555 IPython 7.20 is the accumulation of 3 month of work on IPython, spacing between
566 IPython 7.20 is the accumulation of 3 month of work on IPython, spacing between
556 IPython release have been increased from the usual once a month for various
567 IPython release have been increased from the usual once a month for various
557 reason.
568 reason.
558
569
559 - Mainly as I'm too busy and the effectively sole maintainer, and
570 - Mainly as I'm too busy and the effectively sole maintainer, and
560 - Second because not much changes happened before mid December.
571 - Second because not much changes happened before mid December.
561
572
562 The main driver for this release was the new version of Jedi 0.18 breaking API;
573 The main driver for this release was the new version of Jedi 0.18 breaking API;
563 which was taken care of in the master branch early in 2020 but not in 7.x as I
574 which was taken care of in the master branch early in 2020 but not in 7.x as I
564 though that by now 8.0 would be out.
575 though that by now 8.0 would be out.
565
576
566 The inclusion of a resolver in pip did not help and actually made things worse.
577 The inclusion of a resolver in pip did not help and actually made things worse.
567 If usually I would have simply pinned Jedi to ``<0.18``; this is not a solution
578 If usually I would have simply pinned Jedi to ``<0.18``; this is not a solution
568 anymore as now pip is free to install Jedi 0.18, and downgrade IPython.
579 anymore as now pip is free to install Jedi 0.18, and downgrade IPython.
569
580
570 I'll do my best to keep the regular release, but as the 8.0-dev branch and 7.x
581 I'll do my best to keep the regular release, but as the 8.0-dev branch and 7.x
571 are starting to diverge this is becoming difficult in particular with my limited
582 are starting to diverge this is becoming difficult in particular with my limited
572 time, so if you have any cycles to spare I'll appreciate your help to respond to
583 time, so if you have any cycles to spare I'll appreciate your help to respond to
573 issues and pushing 8.0 forward.
584 issues and pushing 8.0 forward.
574
585
575 Here are thus some of the changes for IPython 7.20.
586 Here are thus some of the changes for IPython 7.20.
576
587
577 - Support for PyQt5 >= 5.11 :ghpull:`12715`
588 - Support for PyQt5 >= 5.11 :ghpull:`12715`
578 - ``%reset`` remove imports more agressively :ghpull:`12718`
589 - ``%reset`` remove imports more agressively :ghpull:`12718`
579 - fix the ``%conda`` magic :ghpull:`12739`
590 - fix the ``%conda`` magic :ghpull:`12739`
580 - compatibility with Jedi 0.18, and bump minimum Jedi version. :ghpull:`12793`
591 - compatibility with Jedi 0.18, and bump minimum Jedi version. :ghpull:`12793`
581
592
582
593
583 .. _version 719:
594 .. _version 719:
584
595
585 IPython 7.19
596 IPython 7.19
586 ============
597 ============
587
598
588 IPython 7.19 accumulative two month of works, bug fixes and improvements, there
599 IPython 7.19 accumulative two month of works, bug fixes and improvements, there
589 was exceptionally no release last month.
600 was exceptionally no release last month.
590
601
591 - Fix to restore the ability to specify more than one extension using command
602 - Fix to restore the ability to specify more than one extension using command
592 line flags when using traitlets 5.0 :ghpull:`12543`
603 line flags when using traitlets 5.0 :ghpull:`12543`
593 - Docs docs formatting that make the install commands work on zsh
604 - Docs docs formatting that make the install commands work on zsh
594 :ghpull:`12587`
605 :ghpull:`12587`
595 - Always display the last frame in tracebacks even if hidden with
606 - Always display the last frame in tracebacks even if hidden with
596 ``__tracebackhide__`` :ghpull:`12601`
607 ``__tracebackhide__`` :ghpull:`12601`
597 - Avoid an issue where a callback can be registered multiple times.
608 - Avoid an issue where a callback can be registered multiple times.
598 :ghpull:`12625`
609 :ghpull:`12625`
599 - Avoid an issue in debugger mode where frames changes could be lost.
610 - Avoid an issue in debugger mode where frames changes could be lost.
600 :ghpull:`12627`
611 :ghpull:`12627`
601
612
602 - Never hide the frames that invoke a debugger, even if marked as hidden by
613 - Never hide the frames that invoke a debugger, even if marked as hidden by
603 ``__tracebackhide__`` :ghpull:`12631`
614 ``__tracebackhide__`` :ghpull:`12631`
604 - Fix calling the debugger in a recursive manner :ghpull:`12659`
615 - Fix calling the debugger in a recursive manner :ghpull:`12659`
605
616
606
617
607 A number of code changes have landed on master and we are getting close to
618 A number of code changes have landed on master and we are getting close to
608 enough new features and codebase improvement that a 8.0 start to make sens.
619 enough new features and codebase improvement that a 8.0 start to make sens.
609 For downstream packages, please start working on migrating downstream testing
620 For downstream packages, please start working on migrating downstream testing
610 away from iptest and using pytest, as nose will not work on Python 3.10 and we
621 away from iptest and using pytest, as nose will not work on Python 3.10 and we
611 will likely start removing it as a dependency for testing.
622 will likely start removing it as a dependency for testing.
612
623
613 .. _version 718:
624 .. _version 718:
614
625
615 IPython 7.18
626 IPython 7.18
616 ============
627 ============
617
628
618 IPython 7.18 is a minor release that mostly contains bugfixes.
629 IPython 7.18 is a minor release that mostly contains bugfixes.
619
630
620 - ``CRLF`` is now handled by magics my default; solving some issues due to copy
631 - ``CRLF`` is now handled by magics my default; solving some issues due to copy
621 pasting on windows. :ghpull:`12475`
632 pasting on windows. :ghpull:`12475`
622
633
623 - Requiring pexpect ``>=4.3`` as we are Python 3.7+ only and earlier version of
634 - Requiring pexpect ``>=4.3`` as we are Python 3.7+ only and earlier version of
624 pexpect will be incompatible. :ghpull:`12510`
635 pexpect will be incompatible. :ghpull:`12510`
625
636
626 - Minimum jedi version is now 0.16. :ghpull:`12488`
637 - Minimum jedi version is now 0.16. :ghpull:`12488`
627
638
628
639
629
640
630 .. _version 717:
641 .. _version 717:
631
642
632 IPython 7.17
643 IPython 7.17
633 ============
644 ============
634
645
635 IPython 7.17 brings a couple of new improvements to API and a couple of user
646 IPython 7.17 brings a couple of new improvements to API and a couple of user
636 facing changes to make the terminal experience more user friendly.
647 facing changes to make the terminal experience more user friendly.
637
648
638 :ghpull:`12407` introduces the ability to pass extra argument to the IPython
649 :ghpull:`12407` introduces the ability to pass extra argument to the IPython
639 debugger class; this is to help a new project from ``kmaork``
650 debugger class; this is to help a new project from ``kmaork``
640 (https://github.com/kmaork/madbg) to feature a fully remote debugger.
651 (https://github.com/kmaork/madbg) to feature a fully remote debugger.
641
652
642 :ghpull:`12410` finally remove support for 3.6, while the codebase is still
653 :ghpull:`12410` finally remove support for 3.6, while the codebase is still
643 technically compatible; IPython will not install on Python 3.6.
654 technically compatible; IPython will not install on Python 3.6.
644
655
645 lots of work on the debugger and hidden frames from ``@impact27`` in
656 lots of work on the debugger and hidden frames from ``@impact27`` in
646 :ghpull:`12437`, :ghpull:`12445`, :ghpull:`12460` and in particular
657 :ghpull:`12437`, :ghpull:`12445`, :ghpull:`12460` and in particular
647 :ghpull:`12453` which make the debug magic more robust at handling spaces.
658 :ghpull:`12453` which make the debug magic more robust at handling spaces.
648
659
649 Biggest API addition is code transformation which is done before code execution;
660 Biggest API addition is code transformation which is done before code execution;
650 IPython allows a number of hooks to catch non-valid Python syntax (magic, prompt
661 IPython allows a number of hooks to catch non-valid Python syntax (magic, prompt
651 stripping...etc). Transformers are usually called many time; typically:
662 stripping...etc). Transformers are usually called many time; typically:
652
663
653 - When trying to figure out whether the code is complete and valid (should we
664 - When trying to figure out whether the code is complete and valid (should we
654 insert a new line or execute ?)
665 insert a new line or execute ?)
655 - During actual code execution pass before giving the code to Python's
666 - During actual code execution pass before giving the code to Python's
656 ``exec``.
667 ``exec``.
657
668
658 This lead to issues when transformer might have had side effects; or do external
669 This lead to issues when transformer might have had side effects; or do external
659 queries. Starting with IPython 7.17 you can expect your transformer to be called
670 queries. Starting with IPython 7.17 you can expect your transformer to be called
660 less time.
671 less time.
661
672
662 Input transformers are now called only once in the execution path of
673 Input transformers are now called only once in the execution path of
663 `InteractiveShell`, allowing to register transformer that potentially have side
674 `InteractiveShell`, allowing to register transformer that potentially have side
664 effects (note that this is not recommended). Internal methods `should_run_async`, and
675 effects (note that this is not recommended). Internal methods `should_run_async`, and
665 `run_cell_async` now take a recommended optional `transformed_cell`, and
676 `run_cell_async` now take a recommended optional `transformed_cell`, and
666 `preprocessing_exc_tuple` parameters that will become mandatory at some point in
677 `preprocessing_exc_tuple` parameters that will become mandatory at some point in
667 the future; that is to say cells need to be explicitly transformed to be valid
678 the future; that is to say cells need to be explicitly transformed to be valid
668 Python syntax ahead of trying to run them. :ghpull:`12440`;
679 Python syntax ahead of trying to run them. :ghpull:`12440`;
669
680
670 ``input_transformers`` can now also have an attribute ``has_side_effects`` set
681 ``input_transformers`` can now also have an attribute ``has_side_effects`` set
671 to `True`, when this attribute is present; this will prevent the transformers
682 to `True`, when this attribute is present; this will prevent the transformers
672 from being ran when IPython is trying to guess whether the user input is
683 from being ran when IPython is trying to guess whether the user input is
673 complete. Note that this may means you will need to explicitly execute in some
684 complete. Note that this may means you will need to explicitly execute in some