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