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